الفرق بين المراجعتين لصفحة: «Laravel/seeding»
رؤيا-بنعطية (نقاش | مساهمات) أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:بذر قواعد البيانات بالبيانات الاختبارية Seeding في Laravel}}</noinclude> تصنيف:Laravel تصني...' |
Wael-aldaghma (نقاش | مساهمات) ط إشارة لمقال قواعد البيانات الشامل |
||
(3 مراجعات متوسطة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:بذر قواعد البيانات بالبيانات الاختبارية Seeding في Laravel}}</noinclude> | <noinclude>{{DISPLAYTITLE:بذر قواعد البيانات بالبيانات الاختبارية Seeding في Laravel}}</noinclude> | ||
[[تصنيف:Laravel]] | [[تصنيف:Laravel|{{SUBPAGENAME}}]] | ||
[[تصنيف:Laravel Database]] | [[تصنيف:Laravel Database|{{SUBPAGENAME}}]] | ||
== مقدمة == | |||
يتضمّن [[Laravel]] تابع بسيط لملء قاعدة البيانات الخاصة بك مع بيانات للتجربة باستخدام أصناف البذر. ستجد جميع أصناف البذر في مجلّد database/seeds، وقد تحتوي أصناف البذر على أي اسم تريده، لكن ربما يجب عليك اتباع بعض المعايير المعقولة مثل <code>UsersTableSeeder</code> ...إلخ. وبشكل افتراضي، سيكون صنف <code>DatabaseSeeder</code> معرّف لك، ومن خلال هذا الصنف يمكنك استخدام أسلوب call لتشغيل بقيّة أصناف البذر، مما يسمح لك بالتحكم بترتيب البذر. | |||
== كتابة منشئات البذور == | |||
لتوليد منشئ البذرة (seeder)، نفّذ أمر <code>make:seeder</code> Artisan وستجد جميع منشئات البذور المولّدة عن طريق هذا الإطار موجودة في مجلد database/seeds:<syntaxhighlight lang="php"> | |||
php artisan make:seeder UsersTableSeeder | |||
</syntaxhighlight>يحتوي صنف منشئ البذرة (seeder) على تابع واحد بشكل افتراضي، وهو <code>run</code>، وسيشتغل هذا التابع عند تنفيذ أمر <code>db:seed</code> Artisan. ويمكنك إضافة البيانات إلى [https://academy.hsoub.com/devops/servers/databases/%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-database/ قاعدة البيانات] كيفما تشاء داخل التابع <code>run</code>، ويمكنك استخدام أداة إنشاء الاستعلام لإدراج البيانات أو يمكنك استخدام مولّدات نموذج [[Laravel/eloquent|Eloquent]]. | |||
تنبيه: تعطّل حماية التعيين الجماعي بشكل تلقائي عند عملية بذر قاعدة البيانات. | |||
كمثال، لنعدّل صنف <code>DatabaseSeeder</code> الافتراضي ونضيف عبارة إضافة إلى قاعدة البيانات إلى التابع <code>run</code>:<syntaxhighlight lang="php"> | |||
<?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'), | |||
]); | |||
} | |||
} | |||
</syntaxhighlight> | |||
ملاحظة: يمكنك كتابة تلميحات عن النوع لأي اعتماديّات تحتاجها في توقيع التابع <code>run</code>، وستُحل تلقائيًا عبر [[Laravel/container|حاوي خدمات Laravel]]. | |||
=== استخدام مولّدات النماذج === | |||
سيكون تحديد خصائص نموذج بذرة أمرًا مرهقًا للغاية بالطبع. يمكنك استخدام المولّدات في هذه الحالة لتوليد كميات كبيرة من سجلات قاعدة البيانات بسهولة. راجع أولًا وثائق مولّد النموذج لتتعلم كيفية تحديد المولّدات الخاصة بك، وبمجرّد تحديدها، يمكنك استخدام الدالة المساعدة <code>factory</code> لإدراج السجلات في قاعدة البيانات الخاصة بك. | |||
على سبيل المثال، لننشئ 50 مستخدم ونربط علاقة لكل مستخدم:<syntaxhighlight lang="php"> | |||
/** | |||
* تنفيذ بذر قاعدة البيانات * | |||
* @إعادة void | |||
*/ | |||
public function run() | |||
{ | |||
factory(App\User::class, 50)->create()->each(function ($u) { | |||
$u->posts()->save(factory(App\Post::class)->make()); | |||
}); | |||
} | |||
</syntaxhighlight> | |||
=== استدعاء منشئات بذور إضافيّة === | |||
ضمن صنف <code>DatabaseSeeder</code>، يمكنك استخدام التابع <code>call</code> لتنفيذ أصناف منشئات بذور إضافيّة، وسيسمح لك هذا التابع بتقسيم بذر قاعدة بياناتك إلى عدة ملفات بحيث لا يكون صنف منشئ بذرة كبير للغية. | |||
مرّر اسم صنف منشئ البذرة الذي ترغب بتشغيله:<syntaxhighlight lang="php"> | |||
/** | |||
* تنفيذ بذر قاعدة البيانات | |||
* void إعادة@ | |||
*/ | |||
public function run() | |||
{ | |||
$this->call([ | |||
UsersTableSeeder::class, | |||
PostsTableSeeder::class, | |||
CommentsTableSeeder::class, | |||
]); | |||
} | |||
</syntaxhighlight> | |||
== تشغيل منشئات البذور == | |||
بمجرّد كتابة منشئ البذرة، قد تحتاج إلى إعادة إنشاء محمّل Composer التلقائي باستخدام الأمر <code>dump-autoload</code>:<syntaxhighlight lang="php"> | |||
composer dump-autoload | |||
</syntaxhighlight>يمكنك الآن استخدم أمر <code>db:seed</code> لبذر قاعدة بياناتك. يشغّل الأمر <code>db:seed</code> افتراضيًّا صنف <code>DatabaseSeeder</code>، والذي يمكن استخدامه لاستدعاء أصناف بذر أخرى. ومع ذلك، يمكنك استخدام الخيار <code>--class</code> لتحديد صنف بذر يُشغّل بشكل افتراضي:<syntaxhighlight lang="php"> | |||
php artisan db:seed | |||
php artisan db:seed --class=UsersTableSeeder | |||
</syntaxhighlight>يمكنك أيضًا بذر قاعدة بياناتك باستخدام الأمر <code>migrate:refresh</code>، والذي سيؤدي إلى إعادة تشغيل جميع عمليات التهجير، وهذا الأمر مفيد لإعادة بناء قاعدة بياناتك بشكل كامل:<syntaxhighlight lang="php"> | |||
php artisan migrate:refresh --seed | |||
</syntaxhighlight> | |||
== مصادر == | |||
* [https://laravel.com/docs/5.6/seeding صفحة Datebase: Seeding في توثيق Laravel الرسمي.] |
المراجعة الحالية بتاريخ 05:26، 6 يوليو 2023
مقدمة
يتضمّن 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