Laravel 5.7.我有两个模型,Foo
和Content
.它们的关系是多态的,因为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
模型时touch
Foo
模型。所以我对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()