【问题标题】:How can I remove all the entries from a many-to-many relation with symfony如何从与 symfony 的多对多关系中删除所有条目
【发布时间】:2016-04-12 10:57:11
【问题描述】:

我正在做一个项目,我需要有一个团队和锦标赛的注册表。一个团队可以参加许多比赛,因此是多对多关系。

所以在 symfony 中,我只为这种多对多关系创建了两个实体:Teams 和 RgTournaments。

ERD

我的问题是如何使用教义从单个查询中删除所有当前关系(截断表 rg_teams_to_tournaments)?

我找到的唯一方法描述为here,但我想避免加载所有条目以便一一删除。

【问题讨论】:

  • 可能重复,看看这个帖子:stackoverflow.com/questions/9686888/…
  • 这两个帖子之间存在细微差别。我正在寻找一种方法来截断(或仅删除所有条目)在多对多关系中使用的表,该表仅使用 symfony 和教义。然而,我发现您的链接非常有趣。谢谢:)

标签: php symfony doctrine


【解决方案1】:

使用 DQL。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#delete-queries

DELETE FROM RelatedEntity WHERE fk = :id

或者您可以使用 QueryBuilder 来构建相同的基本思想

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html

如果您没有实际的实体,请在集合上使用 ->clear() 方法。您找到主要实体(例如团队),然后像 $myTeam->tournaments->clear();然后冲洗。

【讨论】:

  • 这个解决方案的唯一问题是我没有为我的连接表创建实体
  • 我猜你想在集合上使用->clear() 方法。你 find 是主要实体(例如团队),然后像 $myTeam->tournaments->clear();flush 一样。
  • 没错。这就是我一直在寻找的。我希望有一些东西可以让我从单个查询中删除所有团队的所有条目(如截断),但这个解决方案是迄今为止最好的。非常感谢!
  • 如果你不介意接受的话,我在上面修改了我的答案。
【解决方案2】:

如果您只想对整个表进行闪电战,则可以只使用原始 SQL。

快速/肮脏但有效。

$entityManager->getConnection()->executeQuery('delete from your_many_to_many_join_table');

【讨论】:

  • 确实可以。我试图保持一个“干净”的实现,但如果我找不到解决方案,我可能会使用你的建议。谢谢:)
  • 我喜欢有人花时间给我的答案 -1。那么哪里有更好的解决方案呢? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2021-05-10
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多