تتيح لارافل زراعة أو تعبئة قاعدة البيانات عن طريق صفوف الزرع، تتوضع صفوف التعبئة ضمن المجلد database/seeders
افتراضيا تم تعريف الصف DatabaseSeeder
لنستخدم الطريقة call
لنداء بقية صفوف التعبئة،
يسمح لك بالتحكم بأوامر التعبئة
لإنشاء زارع ننفذ الأمر make:seeder
Artisan command
يتوضع الزارعين المنشئين ضمن المجلد database/seeders
php artisan make:seeder UserSeeder
يحتوي صف الزارع افتراضيا على طريقة واحدة run
تُنفذ هذه الطريقة عند نداء الأمر db:seed
Artisan command
يمكنك إدخال البيانات لقاعدة البيانات ضمن الطريقة run
يمكن إدخال البيانات يدوياً باستخدام [query builder](/docs/{{version}}/queries أو Eloquent model factories
في المثال التالي إضافة تعليمة إدخال البيانات لقاعدة البيانات ضمن الطريقة run
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeders.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}
تخصيص يدويا واصفات لكل تعبئة نموذج عملية مرهقة
بدلا من ذلك نستخدم model factories لإنشاء كميات كبيرة من حقول قاعدة البيانات
أولا راجع model factory documentation لتتعلم كيف تُعرف المصانع
في المثال ننشئ 50 مستخدم لكل مستخدم منشور واحد مرتبط به
use App\Models\User;
/**
* Run the database seeders.
*
* @return void
*/
public function run()
{
User::factory()
->count(50)
->hasPosts(1)
->create();
}
نستخدم الطريقة call
ضمن الصف DatabaseSeeder
لتنفيذ صفوف زرع إضافية
يسمح استخدام الطريقة call
بتقسيم تعبئة قواعد البيانات في عدة ملفات لذلك صف الزرع لا يصبح كبير جداً
تقبل الطريقة call
مصفوفة من صفوف الزارع التي يجب أن تُنفذ
/**
* Run the database seeders.
*
* @return void
*/
public function run()
{
$this->call([
UserSeeder::class,
PostSeeder::class,
CommentSeeder::class,
]);
}
لمنع النماذج من إرسال الأحداث عند تشغيل التعبئة نستخدم الميزة WithoutModelEvents
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Run the database seeders.
*
* @return void
*/
public function run()
{
$this->call([
UserSeeder::class,
]);
}
}
لتعبئة قواعد البيانات نستخدم الأمر db:seed
يشغل الأمر db:seed
الصف Database\Seeders\DatabaseSeeder
يمكن استخدام الخيار --class
لتخصيص صف زارع خاص ليعمل بشكل فردي
php artisan db:seed
php artisan db:seed --class=UserSeeder
يمكن تعبئة قاعدة البيانات باستخدام الأمر migrate:fresh
مع الخيار --seed
سوف تحذف كل الجداول وتعيد تشغيل كل الترحيلات
هذا الأمر نافع لإعادة بناء قاعدة البيانات بشكل كامل
php artisan migrate:fresh --seed
تسبب بعض عمليات التعبئة تعديل أو فقدان البيانات
سوف تقوم بالتلقين للتأكيد قبل تنفيذ الزارعين في بيئة production
لإجبار الزارعين للتشغيل بدون تلقين نستخدم العلم --force
php artisan db:seed --force