通过多态关系触摸雄辩模型



Laravel 5.7.我有两个模型,FooContent.它们的关系是多态的,因为Content也可以与其他模型相关:

class Foo extends Model
{
public function contents()
{
return $this->morphToMany('AppContent');
}
}
class Content extends Model
{
use LastModified;
public function foos()
{
return $this->morphedByMany('AppFoo');
}
}

我想在更新Content模型时touchFoo模型。所以我对Content模型使用LastModified特征:

trait LastModified
{
protected static function bootLastModified()
{
static::updating(function ($model) {
static::updateLastModified($model);
});
}
protected static function updateLastModified($model)
{
$foos = $model->foos;
if (count($foos) > 0) {
foreach ($foos as $foo) {
$foo->touch();
}
}
}
}

我的问题是$model->foos返回正确的Foo模型,但id错误。每个Foo都有数据透视表行的id,而不是Foo自己的模型 ID。这意味着触摸了错误的Foo行。

>Laravel具有用于触摸父时间戳的内置功能。

在内容模型上,您可以添加一个属性,告知在更新给定模型时应触及哪些关系。

以下方法应该有效:

class Content extends Model
{
protected $touches = ['foos'];
public function foos()
{
return $this->morphedByMany('AppFoo');
}
}

编辑:由于您使用的是静态更新事件,因此应从static::updated手动调用$model->touchOwners()

最新更新