检查Eloquent在hasMany/belongsTo模型关系上被更改



我想检查我的子/详细模型的wasChanged()状态,就像我在hasMany(parent)::belongsTo(child)关系中对父/标头模型所做的那样。

我的代码看起来像这样:

$parent = Parent::updateOrCreate([ ... ], [ ... ]);
if ($parent->wasChanged()) {
// do something useful
}
foreach ($contents as $child) {
$parent->children()->updateOrCreate([ keys ],[ data ]);
// Now I want to check if the Child model named Contents was changed.
// if ($parents->children()->wasChanged()) { ...  // does not work
}

我怎样才能做到这一点?

不确定$contents做什么,但是,您总是可以做这样的事情来完成您想要完成的想法:

$parent = Parent::updateOrCreate([ keys ],[ data ]);
$parent->load('children');

if ($parent->wasChanged()) {
// do something useful
}
$parent->children()->updateOrCreate([ keys ],[ data ]);  

foreach($parent->children() as $child) {
if ($child->wasChanged()) {
// do something useful
}
}

我甚至不确定这是一个正确的答案,但我最终做的事情似乎是在每次createOrUpdate()呼叫后添加save()呼叫。Laravel文档表明,这不是应该如何工作,但很难与经验证据争论。

$parent = Parent::updateOrCreate([ keys ],[ data ]);
if ($header->wasChanged() || $header->wasRecentlyCreated) {
// Do interesting work
}
$parent->save();
foreach ($myInterestingData as $newChildData) {
$child = $header->children()
->updateOrCreate( ... keys/values from $newChildData ...);
if ($child->wasChanged() || $child->wasRecentlyCreated) {
// Do boring work
}
$child->save();
}

最新更新