Symfony2:在实体或控制器中使用业务(存储库)逻辑的最佳方法

2024-04-06

我的项目中遇到一个设计问题,与放置一些业务逻辑的位置有关。

我有三个实体:Event、TicketOrder 和 Ticket。一项活动有很多 TicketOrder,一项 TicketOrder 也有很多 Ticket。

在我的模板中,我必须显示活动有多少张门票。我一直在思考实现这一目标的最佳方法,但没有找到好的解决方案。我试过这个:

1)在Event实体中创建一个私有成员'ticketsCount',使用setTicketsCount和getTicketsCount方法。使用 LifeCycleCallback“PostLoad”创建“loadTicketsCount”方法,以访问 TicketRepository 方法“findByEvent”。这是不可能的,因为我无法访问实体类中的存储库。

2)在将用于显示事件的操作中,我可以访问票证存储库并手动设置事件“ticketsCount”属性。我不知道这是否是一个好方法,因为如果我的操作列出了很多事件,我将不得不循环所有事件并对每个事件进行存储库调用。

我真的不知道实现这一目标的最佳方法,如果有人可以帮助我,我将非常感激。

谢谢! ;)


当您使用原则实体存储库的 findAll、findBy 或 findBy* 方法时,将返回一个包含实体对象的简单 php 数组。

数组类实现了 countable 接口。所以使用树枝长度过滤器

{{ ticketOrder.tickets|length }}

你执行一个简单的 phpcount()在阵列上。

实际上,现在执行计数查询是有意义的,因为结果已经存在于内存中。因此,计算结果并从内存中检索它似乎更有效,因为当您访问关联时,它们会完全加载到内存中。


然而,实体之间的关联可能会变得相当大。因此,想象一下您与数十万个实体有关联。您不会将这些实体全部加载在一起并始终保留在内存中。所以在 Doctrine 2.1 中你可以将关联注释为超级懒。如果您在您的情况下这样做,则在调用上述树枝过滤器时将执行计数查询。但结果不会保存在内存中。

http://docs.doctrine-project.org/en/2.0.x/tutorials/extra-lazy-associations.html http://docs.doctrine-project.org/en/2.0.x/tutorials/extra-lazy-associations.html


根据您的最新评论:

我可以想象一种方法来做到这一点。在模板中,您可以使用渲染语句调用控制器的操作,例如

{% render YourMainBundle:getTickets with { 'event_id' : event.id } %}

在此操作中,您可以调用一个查询来查找与特定事件关联的所有票证。此操作必须返回 html,例如充满数据的模板。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2:在实体或控制器中使用业务(存储库)逻辑的最佳方法 的相关文章

  • symfony/console 组件的选项数量可变

    如何配置symfony console接受动态选项列表 也就是说 选项的名称在开发步骤中未知 因此我需要一个应用程序来接受所有内容并使用标准公开它 input gt getOption 任何机会都可以做到easily 无需在数百万个地方破解
  • 在 Symfony 2 项目中安装 Bootstrap 主题

    我正在考虑安装这个主题 http bootswatch com superhero 在我的SF2项目中 我注意到页面顶部有4个文件可供下载 即 bootstrap min css 引导程序 css 无变量 bootswatch less 我
  • 如何在 Sonata Admin Bundle 中显示顶部和侧面菜单?

    没有文件谈论这一点 请帮我 谢谢 管理顶部菜单是根据自动创建的group管理服务定义中的项目 所有管理服务都可以分组并显示在顶部菜单中 Example https github com sonata project SonataPageBu
  • 如何使用 Elastica Search 和 Symfony2 执行嵌套查询

    我有一个食谱实体 其中有一些标签 多对多映射 我想按标签搜索食谱 这是我的食谱实体 ORM Entity ORM Table name recipes ORM HasLifecycleCallbacks ExclusionPolicy al
  • 如何自定义 FOS UserBundle URL

    我已经安装了FOS用户包 https github com FriendsOfSymfony FOSUserBundle我想将网址自定义为 account login account register account logout代替 lo
  • twig json_encode 空 json

    我正在从 API 接收元素列表 所有元素的格式都很好 当我使用树枝转储其中一个时 我得到以下信息 Leg 2695 id null reservation null airportStart AIX LES MILLES airplaneT
  • FOSUserBundle 和 ACL 业务角色

    这个周末我开始学习 Symfony 2 我没有遇到任何问题 因为我认为该框架有详细记录 我正在使用 FOSUserBundle 包进行 ACL 我想知道是否可以使其类似于 Yii 框架 bizRule return Yii app gt u
  • 在 Doctrine 2 ORDER BY 中使用 DQL 函数

    我正在使用 MySQL 数据库在 Symfony 2 3 和 Doctrine 2 4 中做一个项目 我有一个 FieldValue 实体 简化 class FieldValue The ID var integer protected f
  • Symfony Finder 忽略以点开头的文件

    我使用 Finder 发送假脱机电子邮件 但自动名称生成器会在文件名中添加点 有时它们会出现在文件的开头 似乎查找器无法获取具有该名称的文件 那么这些文件是隐藏的 有人经历过这种行为吗 有什么建议如何使用查找器来查找隐藏文件吗 Thx 刚刚
  • Symfony 2 FOSUserBundle 与产品表的关系

    如果之前有人问过这个问题 我提前道歉 我已成功设置 FOSUserBundle 我正在尝试设置 http symfony com doc current book doctrine html http symfony com doc cur
  • Git:在本地合并远程分支

    我已经通过以下方式拉取了所有远程分支git fetch all 我可以看到我想要合并的分支git branch a作为远程 原点 分支名称 问题是它无法访问 我无法合并或结帐 您可以参考那些远程跟踪分支 列出git branch r 及其遥
  • 如何使用 symfony / gauferette / VichUploaderBundle 将文件上传到 Google Cloud Storage

    早上好 我正在上传我的文件locally通过VichUploaderBundle 每件事都很完美 现在我不想再在本地存储我的文件 我想将它们存储在谷歌云存储 我找到KnpGaufrette捆绑包可用于在云中存储文件 那么 有没有关于如何配置
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 如何从实体内部获取Web目录路径?

    我研究了如何用 Doctrine 处理文件上传 http symfony com doc current cookbook doctrine file uploads html我不想硬编码 DIR web this gt getUpload
  • Symfony2 中的 Composer 创建相同的资源两次(jquery、jqueryui)

    我将 jquery 和 jqueryui 添加到composer json require components jquery 1 11 dev components jqueryui 1 10 4 作曲家正在下载这两个库并将它们放入供应商
  • 如何在颠覆合并期间忽略文件夹

    我有一大堆更改需要合并到我的分支中 但我想在合并过程中忽略特定文件夹 是否可以使用 Subversion 来做到这一点 如果是这样那我该怎么办呢 编辑 我想忽略的文件夹位于存储库中 但在合并期间我不会对此文件夹进行更改 您可以像平常一样进行
  • Stripe 支付网关使用 PayumBundle 创建定期付款

    我在用支付包 https github com Payum PayumBundle将 Stripe 支付网关集成到我的 symfony2 应用程序中 我可以创建成功的直接付款 但无法创建定期付款 因为捆绑包的文档非常差 我的问题是如何使用
  • 为什么将 Ubuntu 升级到 22.04 后 phpMyAdmin 停止工作?

    刚刚升级到 Ubuntu 22 04 现在我的 phpmyadmin 无法加载 我收到以下错误 解析错误 语法错误 usr share php Symfony Component DependencyInjection ContainerB
  • 为 Symfony 指定备用后备路径以查找捆绑包的树枝模板

    基本问题 如何让 symfony 在非标准目录中查找 最佳 自定义 Twig 模板来加载捆绑视图 Symfony 文档说默认情况下它会在两个位置查找覆盖 Twig 模板 http symfony com doc current book t
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o

随机推荐