我如何从一个观察者的模型中加载一个关系?
当我尝试使用$inport->load('items')
在created
方法中加载关系时,它返回一个空数组。
这是我的Inport
模型中定义的关系:
public function items()
{
return $this->hasMany(InportItem::class);
}
观察者法
public function created(Inport $inport)
{
dd($inport->load('items'));
}
Inport
表格
id
name
inport_items
表格
id
inport_id
number
3条答案
按热度按时间t8e9dugd1#
你得试试
你的items()方法应该是这样的。
brgchamk2#
观察者看不到关系,因为它还没有创建。
hasMany
关系意味着InportItem
类存储Inport
模型的id,并且它只能存储Inport
模型 * 在 * 创建之后 * 的id。您的选择:
afterCommit
属性(我不确定这是否有效)InportItem
模型而不是Inport
模型上使用created
事件的观察器(您可能希望在InportItem
上添加belongsTo
,将其链接到Inport
)2g32fytz3#
调用
$inport->save()
或Inport::create([])
后,将立即触发Inport观察器方法此时,还没有创建inportItems,您可能需要在下一行执行类似这样的操作:
$inport->inportItems()->create([...])
因此,您需要:
1.使用
public $afterCommit = true
创建一个InportObserver类1.将
$inport->save()
和$inport->inportItems()->create([])
调用封装在DB::事务中,这样父observer方法将在创建子observer之后触发。