چطور در لاراول به صورت زنجیره وار seed کنیم؟

348 بازدید 2 سال قبل 0 دیدگاه

اگر با seeder در لاراول کار کرده باشید، احتمالا میدونید که وقتی یک رابطه HasMany برای مدل داشته باشیم، میتونیم خیلی راحت برای relation های اون مدل هم رکورد بسازیم. چطوری؟

یه مثال از مستندات خود لاراول برات میارم:

$course = Course::factory()
    ->has(Section::factory()->count(5))
    ->create();

توی این مثال فرض کردیم که چنین رابطه ای بین مدل ها وجود داشته باشه:

Course -> hasMany -> Section

با این کار، یک رکورد برای مدل Course ساختیم و برای همون مدل Course، 5 رکورد Section هم ساختیم. خب تا اینجا که ساده بود و توی داکیومنت فریمورک لاراول هم ذکر شده بود. اما اگر مدل Section هم یه رابطه hasMany داشته باشه و ما بخوایم همزمان برای اون هم رکورد seed کنیم آیا امکان پذیره؟

خب بیا با هم انجام بدیم. فرض میکنیم رابطه ها این طوری باشه:

Course -> hasMany -> Section
    Section -> hasMany -> Lesson

چیزی که توی داکیومنت Laravel ذکر نشده. اینه که شما میتونی این زنجیره رو ادامه بدی و با هر بار ادامه دادن این زنجیر، رکوردهای جدید برای آخرین relation استفاده شده، ساخته میشه. یعنی چی؟

$course = Course::factory()
    ->has(Section::factory()->count(5))
         ->has(lesson::factory()->count(8))
    ->create();

یعنی اینکه با اجرای کد بالا، ما یک رکورد برای مدل Course ساختیم و برای اون رکود، 5 رکورد از مدل Section ساختیم و برای هر کدوم از این 5 رکورد مربوط به Section هم 8 رکورد از مدل Lesson ساختیم (به رابطه های hasMany که قبلتر تعریف کردم دقت کنید)

به همین سادگی! جالب اینجاست که این زنجیره تا بینهایت میتونه ادامه پیدا کنه

اگر این آموزش برات مفید بود توی کامنت ها بهم بگو!

0 دیدگاه   (ارسال دیدگاه)