簡體   English   中英

Laravel模型工廠所屬的關系不起作用

[英]Laravel Model factories belongsTo relationship not working

每個人我都對Laravel 模型工廠有疑問,我有以下工廠定義。

$factory->define(Video::class, function (Faker\Generator $faker) {
    return [
        "title"         => $faker->unique()->text,
        "description"   => $faker->text(),
        "created_at"    => $faker->dateTimeThisYear
    ];
});

基本上,此模型與內容資源表具有兩個belongsTo關系,並將其定義為content_idresource_id列。

因此,我希望該播種者可以創建內容,資源,然后在創建內容之前將其附加到視頻模型。

    factory(Video::class, 50)->create()->each(function($item) {
        /** @var $item Video */
        $item->content()->associate(factory(Content::class)->create());
        $item->resource()->associate(factory(Resource::class)->create());
    });

但是,這不起作用,並且我在videos表上收到有關content_id外鍵的錯誤。 我在這里做錯了什么? 任何幫助是極大的贊賞 :)

我會這樣做: 為模型創建工廠並從新工廠中引用它們

$factory->define('App\Content', function(Faker\Generator $faker) {
    return [
        'body' => $faker->paragraph
    ];
});

$factory->define('App\Resource', function(Faker\Generator $faker) {
    return [

    ];
});

$factory->define('App\Video', function (Faker\Generator $faker) {
    return [
        "title"         => $faker->unique()->text,
        "content_id" => function() {
            return factory('App\Content')->create()->id;
        },
        "resource_id" => function() {
            return factory('App\Resource')->create()->id;
        },
        "description"   => $faker->text(),
        "created_at"    => $faker->dateTimeThisYear
    ];
});

我假設您的Video類在App下命名。 如果您的類未命名空間,則可以刪除應用程序名稱空間。

您還可以分配相應的內容和資源ID factory('App\\Content')->create() ,並且laravel自動為您分配適當的ID。 例:

"resource_id" => factory('App\Content')->create(),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM