عدم ذخیره مقادیری که در factory ها مشخص می شود

4 سال پیش توسط فرهاد اشتری مطرح شد
آفلاین
user-avatar
فرهاد اشتری ( 44755 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

با سلام
من در کار با phpunit می خوام از factory ها برای ذخیره اطلاعات fake در دیتابیس استفاده کنم.
یک نمونه کدی که استفاده کردم این جاست

use FakerGenerator as Faker;

$factory->define(AppProvinces::class, function (Faker $faker) {
    return [
        'name' => $faker->name
    ];
});

اما وقتی تست را ران می کنم در ترمینال به من خطا می دهد. ظاهرا مقدار name را در دستور insert قرار نمی دهد.
دستور insert که در متن خطا می بینم به این صورت است.

SQL: insert into province() values ()

متن خطا هم به این صورت است:

General error: 1364 Field 'name' doesn't have a default value (SQL: insert intoprovince() values ())
بهترین پاسخ
آفلاین
user-avatar
فرهاد اشتری
4 سال پیش

مشکل رو متوجه شدم.
راه حل اون خیلی عجیب و دور از انتظاربود
من در متد __construct مدل Provinces
دستور زیر را فراخوانی نکرده بودم:

 parent::__construct($attributes);

در واقع متد constructor مدل من باید به صورت زیر باشد.

 public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
    }
آفلاین
user-avatar
فرهاد اشتری ( 44755 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

مشکل رو متوجه شدم.
راه حل اون خیلی عجیب و دور از انتظاربود
من در متد __construct مدل Provinces
دستور زیر را فراخوانی نکرده بودم:

 parent::__construct($attributes);

در واقع متد constructor مدل من باید به صورت زیر باشد.

 public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
    }
آفلاین
user-avatar
حسام موسوی ( 473667 تجربه )
4 سال پیش
تخصص : طراح و برنامه نویس

لینک کوتاه اشتراک گذاری

0

با سلام
این مشکل نباید اصلا پیش بیاد و اصلا هم نباید به این راه حل نیاز باشه
شما در مدل خودتون از fillable استفاده کردید ؟

آفلاین
user-avatar
فرهاد اشتری ( 44755 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

بله استفاده کرده بودم. اما مشکل حل نشده بود. اما وقتی متغیر attributes رو به constructor کلاس والد پاس دادم مشکل حل شد.
البته الزاما نیازی نیست که در مدل مورد نظر constructor نوشته بشه. اما اگر نوشته بشه باید حتما constructor کلاس والد فراخوانی بشه.

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.