2014-10-01 37 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