2016-12-21 25 views
2

假設我們有ClassStudent模型與他們之間定義的多對多關係。如何檢查型號附件是否有變化?

我想執行一些操作,如果$students,連接到$class,更改。例如:

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

這是如何實現的?在覆蓋save()方法時,我嘗試使用..->isDirty(),但它似乎不適用於所連接的模型。

更新

檢查..->isDirty()樞軸似乎並沒有工作,要麼:通過延長Ardent

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

在你的Class模型(比如說saveNewSetOfStudents)上有一個方法來封裝attach和save方法,並且添加你需要的任何其他邏輯。 – Mei

+0

那麼,它會工作,但它可能會導致未來的錯誤。例如,如果另一個開發人員,甚至是我忘記了附件只需要通過該方法發生,並使用常規的'attach()'。所以說這種方法並不是那麼「乾淨」。 –

回答

1

做的,是使用beforeSave()方法的最好的事情,那裏你可以處理你想要的情況,做更改,讓它自己進入保存方法。

看看這個漂亮package

1

您可以使用模型事件 - 這樣createdPivot

use Illuminate\Database\Eloquent\Relations\Pivot; 

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

這種解決方案對於激發每個樞軸&只能在attach()情況。

查看更多有關這一點 - here

希望這有助於!

+0

非常感謝!完全忘了事件.. –

+0

對不起,事件沒有解僱..嘗試了所有這些+將他們都放在'EventServiceProvider'以及'AppServiceProvider'無效 –

+0

@AlexanderLomia - 確保你在模型的'boot'方法中處理這個問題,或者通過加載模型觀察者來做到這一點! –