Laravel 更新多态关系中的子模型时更新父时间戳

Laravel 更新多态关系中的子模型时更新父时间戳,laravel,polymorphism,eloquent,laravel-5.1,Laravel,Polymorphism,Eloquent,Laravel 5.1,在Laravel 5.1中,我有两个模型。一个是城市模型,一个是照片模型。 城市与照片之间存在多态关系。 在更新城市照片时使用 $city->photos()->updateOrCreate($attributes,$values) 子时间戳将更新。但是父模型的时间戳(在本例中是City)不会相应地更新,我应该手动调用 $city->touch() 在Laravel中触摸子模型时,如何更新父模型的时间戳?要更新父模型的时间戳: 在Photo.php模型中,可以声明以下行:

在Laravel 5.1中,我有两个模型。一个是城市模型,一个是照片模型。
城市与照片之间存在多态关系。 在更新城市照片时使用

$city->photos()->updateOrCreate($attributes,$values)
子时间戳将更新。但是父模型的时间戳(在本例中是City)不会相应地更新,我应该手动调用

$city->touch()

在Laravel中触摸子模型时,如何更新父模型的时间戳?

要更新父模型的时间戳:

在Photo.php模型中,可以声明以下行:

class Photo extends Model
{
   protected $touches = ['city']; //The 'city' refers to your parent's model
}
现在,当您像之前一样更新照片模型时:

$city->photos()->updateOrCreate($attributes,$values)

它将自动更新父模型的时间戳,在您的情况下,将更新城市表。

用于多态关系

class Photo extends Eloquent {

  protected $touches = ['city'];

  public function city() {
    return $this->morphTo() // add this function if not already done
  }
}

class City extends Eloquent {

  public function photos() {
    return $this->morphMany(App\Photo::class, 'city');
  }
}
在这种情况下,当照片更新时,它会接触到他的父母(这种情况下的城市)


希望有帮助。

如果希望透视表自动维护created_at和Update_at timestaps,请在关系定义上使用WithTimestaps方法:return$this->belongTomany('App\Role')->WithTimestaps();我想知道你为什么喜欢这种行为?谢谢你发布你的型号代码?我做过类似的案例,效果很好。请参阅本文档,了解如何在更新子项时更新父项时间戳,只需将答案从“照片”更改为“照片”。它应该参考孩子的模型。这也适用于一个模型
属于另一个模型的关系。我有一个多态关系。不:)我只是手动触摸模型。测试你的答案,但没有帮助。不管怎样,谢谢你