【问题标题】:Issue with seeder between 3 entities3 个实体之间的播种机问题
【发布时间】:2019-09-19 07:03:26
【问题描述】:

我对播种机新闻有疑问。它有两个实体之间的关系。命令 php artisan db:seed 的结果是下一个:

Illuminate\Database\QueryException:SQLSTATE[HY000]:一般错误:1364 Fi 字段'user_id'没有默认值(SQL:插入newstitleb odyauthorcreated_atupdated_at)值(博士,Nisi quia et provident expedita voluptatem debitis quas。 Ut in dicta magni voluptatum hic facere adipis ci。 Eum aut porro voluptatem est sit numquam ex a., Janiya Lowe, 2019-09-19 06:5 4:25, 2019-09-19 06:54:25))

我有 3 个实体:

User                          News                             Category
id                             id                                id                                              
                              user_id                         
                              category_id                                                                    

我的 NewsTableSeeder 是下一个:

public function run()
    {
        factory(News::class, 20)->create()->each(function ($news) {
            $news->category()->save(factory(NewsCategory::class)->make());
            $news->writtenBy()->save(factory(User::class)->make());
        });
    }

我的班级新闻是下一个

class News extends Model
{
    protected $table = 'news';
    protected $fillable = ['title', 'body', 'author', 'created_at', 'update_at'];

    /**
     * WrittenBy belongs to User.
     */
    public function writtenBy()
    {
        return $this->hasOne(User::class);
    }

    /**
     * Category belongs to User.
     */
    public function category()
    {
        return $this->hasOne(NewsCategory::class);
    }
}

你能帮帮我吗?

【问题讨论】:

    标签: laravel eloquent-relationship


    【解决方案1】:

    检查一下,

    public function run()
        {
     DB::statement('SET FOREIGN_KEY_CHECKS=0;');
            factory(News::class, 20)->create()->each(function ($news) {
                $news->category()->save(factory(NewsCategory::class)->make());
                $news->writtenBy()->save(factory(User::class)->make());
            });
     DB::statement('SET FOREIGN_KEY_CHECKS=1;');
        }
    

    【讨论】:

    • 嗨@smzihan,如果你能解释一下变化是什么以及为什么放在那里。那会很棒。
    • 在新闻表中 user_id 是外键。所以当你插入数据时设置 FOREIGN_KEY_CHECK 为零...插入数据后设置 FOREIGN_KEY_CHECK。这是因为这次不检查foreign_key
    • 感谢您的回答,但结果是一样的。我的表用户和新闻类别不为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多