Ларавел 5.7.У меня есть две модели, Foo
и Content
.Их отношения полиморфны, поскольку Content
также может относиться к другим моделям:
class Foo extends Model
{
public function contents()
{
return $this->morphToMany('App\Content');
}
}
class Content extends Model
{
use LastModified;
public function foos()
{
return $this->morphedByMany('App\Foo');
}
}
Я хочу touch
модель Foo
всякий раз, когда обновляется модель Content
.Поэтому я использую черту LastModified
для модели Content
:
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
каждый Foo
имеет id
строки сводной таблицы.Это означает, что к неправильной строке Foo
дотронулись.