laravel 从观察者方法加载模型关系

t1qtbnec  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(148)

我如何从一个观察者的模型中加载一个关系?
当我尝试使用$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
t8e9dugd

t8e9dugd1#

你得试试

dd( $inport->items );

你的items()方法应该是这样的。

public function items()
{
    return $this->hasMany(InportItem::class, 'inport_id', 'id'); // where inport_id is your foreign key and id is your primary key in inport_items table
}
brgchamk

brgchamk2#

观察者看不到关系,因为它还没有创建。
hasMany关系意味着InportItem类存储Inport模型的id,并且它只能存储Inport模型 * 在 * 创建之后 * 的id。
您的选择:

  • 尝试在观察者上使用afterCommit属性(我不确定这是否有效)
  • 在您的InportItem模型而不是Inport模型上使用created事件的观察器(您可能希望在InportItem上添加belongsTo,将其链接到Inport
2g32fytz

2g32fytz3#

调用$inport->save()Inport::create([])后,将立即触发Inport观察器方法
此时,还没有创建inportItems,您可能需要在下一行执行类似这样的操作:$inport->inportItems()->create([...])
因此,您需要:
1.使用public $afterCommit = true创建一个InportObserver类
1.将$inport->save()$inport->inportItems()->create([])调用封装在DB::事务中,这样父observer方法将在创建子observer之后触发。

相关问题