如何检查型号的附件是否已更改?

时间:2016-12-21 14:12:56

标签: laravel laravel-5 eloquent

假设我们的ClassStudent模型之间定义了多对多关系。

我想要执行一些操作,如果$students附加到$class,则会更改。例如:

$class->attach($newSetOfStudents); // notify a teacher about the change behind the scenes
$class->save();                    // by overriden save() or attach() methods

如何实现这一目标?我在覆盖..->isDirty()方法时尝试使用save(),但它似乎不适用于附加模型。

更新

检查..->isDirty()的支点似乎无效:

// ..
foreach($class->students as $student){
    if($student->pivot->isDirty()) return true;
}
// ..

2 个答案:

答案 0 :(得分:1)

最好的办法是通过扩展Ardent来使用beforeSave()方法,在那里你可以处理你想要的情况,进行更改,让它自己转到save方法。

看看这个不错的package

答案 1 :(得分:1)

您可以在created上使用模型事件 - Pivot,如下所示:

use Illuminate\Database\Eloquent\Relations\Pivot;

Pivot::created(function($pivot) {
 // Do something here
});

这个解决方案针对每个枢轴和仅适用于attach()

详细了解这一点 - here

希望这有帮助!