如何解决模型中具有启动功能的种子工厂
我想知道在模型中使用引导函数时如何为数据播种。
目前我在模型中有这个:
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 是?
解决方法
您不需要创建事件的功能(因为它不会成为种子中的 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 举报,一经查实,本站将立刻删除。