微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模型中具有启动功能的种子工厂

如何解决模型中具有启动功能的种子工厂

我想知道在模型中使用引导函数时如何为数据播种。

目前我在模型中有这个:

class Event extends Model
{

    protected $fillable = ['title',...];

    public static function booted()
    {
        static::creating(function ($event) {
            $event->user_id = auth()->id();
        });
    }
    ...
}

在工厂里,我有这个:

return [
    'title' => $this->faker->sentence(),'user_id' => User::all()->random()->id,...
];

但是当我执行播种机时,我有一个错误

sqlSTATE[23000]:违反完整性约束:1048 列“user_id”不能为空(sql:插入到 events (title,content,user_id,{ {1}},start_date,end_date,places_available,is_active,created_at) 值 (Laudantium enim totam quibusdam mollitia aut et.,Qui ducimus rerum quo necessitatibus in. Officia ea eveniet aut voluptas reiciendis quam eum quo. Sit eos velit tempore placeat.,?,2019-07-07 14:15:24,2021-07-14 13:57:21,-20 07-07 14:15:24,2021-07-22 15:04:30))

用户 ID 是?

如果我删除模型中的 booted() 函数,它就可以工作。

解决方法

您不需要创建事件的功能(因为它不会成为种子中的 auth 用户),因此您可以在种子中禁用事件,Muting Eloquent Events

Event::withoutEvents(function () {
    Event::factory()...;
});
,

在您的模型中,您可以默认分配 auth()->id(),或者,如果它是 null,您在 create 方法中分配的值:

public static function booted()
{
    static::creating(function ($event) {
        $event->user_id = auth()->id() ?? $event->user_id;
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。