بذر قواعد البيانات بالبيانات الاختبارية Seeding في Laravel

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

مقدمة

يتضمّن Laravel تابع بسيط لملء قاعدة البيانات الخاصة بك مع بيانات للتجربة باستخدام أصناف البذر. ستجد جميع أصناف البذر في مجلّد database/seeds، وقد تحتوي أصناف البذر على أي اسم تريده، لكن ربما يجب عليك اتباع بعض المعايير المعقولة مثل UsersTableSeeder ...إلخ. وبشكل افتراضي، سيكون صنف DatabaseSeeder معرّف لك، ومن خلال هذا الصنف يمكنك استخدام أسلوب call لتشغيل بقيّة أصناف البذر، مما يسمح لك بالتحكم بترتيب البذر.

كتابة منشئات البذور

لتوليد منشئ البذرة (seeder)، نفّذ أمر make:seeder Artisan وستجد جميع منشئات البذور المولّدة عن طريق هذا الإطار موجودة في مجلد database/seeds:

php artisan make:seeder UsersTableSeeder

يحتوي صنف منشئ البذرة (seeder) على تابع واحد بشكل افتراضي، وهو run، وسيشتغل هذا التابع عند تنفيذ أمر db:seed Artisan. ويمكنك إضافة البيانات إلى قاعدة البيانات كيفما تشاء داخل التابع run، ويمكنك استخدام أداة إنشاء الاستعلام لإدراج البيانات أو يمكنك استخدام مولّدات نموذج Eloquent.

تنبيه: تعطّل حماية التعيين الجماعي بشكل تلقائي عند عملية بذر قاعدة البيانات.

كمثال، لنعدّل صنف DatabaseSeeder الافتراضي ونضيف عبارة إضافة إلى قاعدة البيانات إلى التابع run:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class DatabaseSeeder extends Seeder
{

   /**
    * تنفيذ بذر قاعدة البيانات     *
    * @إعادة void
    */

   public function run()

   {
       DB::table('users')->insert([
           'name' => str_random(10),
           'email' => str_random(10).'@gmail.com',
           'password' => bcrypt('secret'),

       ]);
   }
}

ملاحظة: يمكنك كتابة تلميحات عن النوع لأي اعتماديّات تحتاجها في توقيع التابع run، وستُحل تلقائيًا عبر حاوي خدمات Laravel.

استخدام مولّدات النماذج

سيكون تحديد خصائص نموذج بذرة أمرًا مرهقًا للغاية بالطبع. يمكنك استخدام المولّدات في هذه الحالة لتوليد كميات كبيرة من سجلات قاعدة البيانات بسهولة. راجع أولًا وثائق مولّد النموذج لتتعلم كيفية تحديد المولّدات الخاصة بك، وبمجرّد تحديدها، يمكنك استخدام الدالة المساعدة factory لإدراج السجلات في قاعدة البيانات الخاصة بك.

على سبيل المثال، لننشئ 50 مستخدم ونربط علاقة لكل مستخدم:

/**
* تنفيذ بذر قاعدة البيانات *
* @إعادة void
*/

public function run()
{

   factory(App\User::class, 50)->create()->each(function ($u) {
       $u->posts()->save(factory(App\Post::class)->make());

   });
}

استدعاء منشئات بذور إضافيّة

ضمن صنف DatabaseSeeder، يمكنك استخدام التابع call لتنفيذ أصناف منشئات بذور إضافيّة، وسيسمح لك هذا التابع بتقسيم بذر قاعدة بياناتك إلى عدة ملفات بحيث لا يكون صنف منشئ بذرة كبير للغية.

مرّر اسم صنف منشئ البذرة الذي ترغب بتشغيله:

/**
* تنفيذ بذر قاعدة البيانات
 * void إعادة@
*/

public function run()
{

   $this->call([

       UsersTableSeeder::class,
       PostsTableSeeder::class,
       CommentsTableSeeder::class,

   ]);
}

تشغيل منشئات البذور

بمجرّد كتابة منشئ البذرة، قد تحتاج إلى إعادة إنشاء محمّل Composer التلقائي باستخدام الأمر dump-autoload:

composer dump-autoload

يمكنك الآن استخدم أمر db:seed لبذر قاعدة بياناتك. يشغّل الأمر db:seed افتراضيًّا صنف DatabaseSeeder، والذي يمكن استخدامه لاستدعاء أصناف بذر أخرى. ومع ذلك، يمكنك استخدام الخيار ‎--class لتحديد صنف بذر يُشغّل بشكل افتراضي:

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

يمكنك أيضًا بذر قاعدة بياناتك باستخدام الأمر migrate:refresh، والذي سيؤدي إلى إعادة تشغيل جميع عمليات التهجير، وهذا الأمر مفيد لإعادة بناء قاعدة بياناتك بشكل كامل:

php artisan migrate:refresh --seed

مصادر