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

时间:2015-08-30 19:29:04

标签: laravel polymorphism eloquent laravel-5.1

在Laravel 5.1中我有两个模型。一个城市模型和一个照片模型 城市和照片之间存在多态关系。 使用

更新城市的照片时
$city->photos()->updateOrCreate($attributes,$values)

子时间戳更新。但是父模型的时间戳(在这种情况下是City)不会相应更新,我应该手动调用

$city->touch()

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

2 个答案:

答案 0 :(得分:2)

对于多态关系

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');
  }
}

在这种情况下,当照片更新时,它会触及他的父母(在那种情况下的城市)。

希望它有所帮助。

答案 1 :(得分:0)

更新父母的时间戳:

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

class Photo extends Model
{
   protected $touches = ['city']; //The 'city' refers to your parent's model
}

现在,当你像你所做的那样更新照片模型时:

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

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