Hug*_*ira 5 entity business-logic repository symfony doctrine-orm
我在我的项目中遇到了一个设计问题,与哪些业务逻辑相关.
我有三个实体,Event,TicketOrder和Ticket.One Event有很多TicketOrders,一个TicketOrder有很多Tickets.
在我的模板中,我必须显示一个事件有多少票.我想到了实现这一目标的最佳方法,并没有得到一个好的解决方案.我试过这个:
1)使用setTicketsCount和getTicketsCount方法在Event实体中创建私有成员'ticketsCount'.使用LifeCycleCallback'PostLoad'创建'loadTicketsCount'方法,以访问TicketRepository方法'findByEvent'.这是不可能的,因为我无法访问实体类中的存储库.
2)在将用于显示事件的操作中,我可以访问Ticket Repository并手动设置事件'ticketsCount'属性.我不知道这是否是一个好方法,因为如果我的动作列出了很多事件,我将不得不循环所有事件并对每个事件进行存储库调用.
我真的不知道实现这一目标的最佳方法,如果有人可以帮助我,我将非常感激.
谢谢!;)
当您使用原则实体存储库的 findAll、findBy 或 findBy* 方法时,将返回一个包含实体对象的简单 php 数组。
数组类实现了 countable 接口。所以使用树枝长度过滤器
{{ ticketOrder.tickets|length }}
Run Code Online (Sandbox Code Playgroud)
count()你在数组上执行一个简单的 php 。
实际上,现在执行计数查询是有意义的,因为结果已经存在于内存中。因此,计算结果并从内存中检索它似乎更有效,因为当您访问关联时,它们会完全加载到内存中。
然而,实体之间的关联可能会变得相当大。因此,想象一下您与数十万个实体有关联。您不会将这些实体全部加载在一起并始终保留在内存中。因此,在 Doctrine 2.1 中,您可以将关联注释为Extra Lazy。如果您在您的情况下这样做,则在调用上述树枝过滤器时将执行计数查询。但结果不会保存在内存中。
http://docs.doctrine-project.org/en/2.0.x/tutorials/extra-lazy-associations.html
根据您的最新评论:
我可以想象一种方法来做到这一点。在模板中,您可以使用渲染语句调用控制器的操作,例如
{% render YourMainBundle:getTickets with { 'event_id' : event.id } %}
Run Code Online (Sandbox Code Playgroud)
在此操作中,您可以调用一个查询来查找与特定事件关联的所有票证。此操作必须返回 html,例如填充数据的模板。
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |