2014-10-01 38 views
0

我有口才以下3種型號:觸發一個事件如果有條件的INSERT或DELETE預製雄辯模型Laravel 4

業務 [ID,名稱]

MAILINGLIST [ID ,business_id,姓名,聚集]

聯繫人 [ID,電子郵件,姓名]

個MAILINGLISTS屬於一個業務(母雞business_id)和聯繫屬於多個郵件列表。現在每個業務有一個郵件列表名爲「所有聯繫人」其中聚合設置爲TRUE。

如果聯繫添加到業務也應該被添加到「所有聯繫人」 MAILINGLIST(但只有一次)的郵件列表。如果聯繫從「所有聯繫人」 MAILINGLIST刪除它也應該從所有業務的其他MAILINGLIST被刪除。

我相信一定有觸發事件的路要走,如果一個INSERT被預製上如果和一個任意但「所有聯繫人」 mailinlist DELETE是預製的「所有接觸」的郵件列表,只我想不出一個。任何人都可以將我指向正確的方向嗎?

+0

'所有contacts'是抽象的東西。重新設計它是明智的,而是用它來簡單地顯示來自商業清單的所有電子郵件。這樣你就不必擔心你所要求的東西。無論如何,你可以聽'MailingList'的'創建'/'刪除'事件(你不需要觸發任何東西,它們已經存在http://laravel.com/docs/4.2/eloquent#model-events)並在聽衆中完成這項工作。您應該爲此創建單獨的處理程序類 - http://laravel.com/docs/4。2/events – 2014-10-02 08:13:04

+0

嗯,這聽起來很聰明,現在你提到它。謝謝!如果你將它發佈在答案中,我可以給你點數。 – WillyBurb 2014-10-02 09:33:12

回答

1

在Eloquent的背景下,您可以使用不同的型號:如MailingListAggregateMailingList

後者將是給定業務的所有聯繫人的只讀聚合。你可以使用視圖在數據庫中處理它,並將其設置爲AggregateMailingListprotected $table屬性。

這樣你就不用擔心你要求的事件。


但是,如果你喜歡通過事件來處理它,看看這個:http://laravel.com/docs/4.2/eloquent#model-eventshttp://laravel.com/docs/4.2/events

我建議創建單獨的類作爲事件處理程序,並把你的邏輯存在,那麼只需將其註冊爲監聽事件如:eloquent.creating: MailingList