الفرق بين المراجعتين لصفحة: «Laravel/seeding»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:بذر قواعد البيانات بالبيانات الاختبارية Seeding في Laravel}}</noinclude> تصنيف:Laravel تصني...'
 
لا ملخص تعديل
سطر 2: سطر 2:
[[تصنيف:Laravel]]
[[تصنيف:Laravel]]
[[تصنيف:Laravel Database]]
[[تصنيف:Laravel Database]]
== مقدمة ==
يتضمّن [[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. ويمكنك إضافة البيانات إلى قاعدة البيانات كيفما تشاء داخل التابع <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 الرسمي.]

مراجعة 21:04، 20 أكتوبر 2018


مقدمة

يتضمّن 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

مصادر