使用 Doctrine 和 Symfony2 查询多对多关系

2024-03-07

我试图理解 Doctrine 和 Symfony2 中的多对多关系是如何运作的。

我重新创建了官方文档(goo.gl/GYcVE0)中显示的示例,并且我有两个实体类:User and Group正如你在下面看到的。

<?php
/** @Entity **/
class User
{
    // ...

    /**
     * @ManyToMany(targetEntity="Group", inversedBy="users")
     * @JoinTable(name="users_groups")
     **/
    private $groups;

    public function __construct() {
        $this->groups = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

/** @Entity **/
class Group
{
    // ...
    /**
     * @ManyToMany(targetEntity="User", mappedBy="groups")
     **/
    private $users;

    public function __construct() {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

如果我更新我的数据库,我会得到这个 MySQL 架构:

CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE users_groups (
    user_id INT NOT NULL,
    group_id INT NOT NULL,
    PRIMARY KEY(user_id, group_id)
) ENGINE = InnoDB;
CREATE TABLE Group (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id);

问题是在 Symfony2 中我需要Entity生成查询,在这种情况下,我没有与表关联的实体users_group因为这个表是框架自动创建的。

那么,如何检索与该关系表相关的信息呢?例如,我需要获取组中的所有用户,这些用户的 id 出现在表中users_group.

如何使用 DQL、QueryBuilder 或其他方法来做到这一点?

多谢。


您可以编写一个连接 DQL 查询,如下所示

$em = $this->getContainer()->get('doctrine')->getManager();
$repository = $em->getRepository('YourNamespaceYourBundle:User');
$query = $repository->createQueryBuilder('u')
    ->innerJoin('u.groups', 'g')
    ->where('g.id = :group_id')
    ->setParameter('group_id', 5)
    ->getQuery()->getResult();

您的映射groups财产在User实体将处理连接部分本身,您不必在 DQL 查询中提及连接表

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

使用 Doctrine 和 Symfony2 查询多对多关系 的相关文章

随机推荐

  • Chartjs 在鼠标悬停时非常快速地调整大小(闪烁)

    我在基于引导的页面中有一个图表 我试图在页面调整大小时调整它的大小 以遵循响应式设计的变化 所以我有这段代码 function redrawChart var w chart container width var c document g
  • 使用 ctypes 从 Python 调用带有 Char** 参数的 C 方法

    我需要一种使用 ctypes 库将数组从 Python 传递到 char 的方法到 C 库 我尝试过的一些方法导致我出现分段错误 另一些则导致垃圾信息 由于我已经在这个问题上苦苦挣扎了一段时间 我决定写一个小指南 以便其他人可以受益 有这段
  • 当 Stream.Read() 存在时,StreamReader 的用途是什么?

    这一直困扰着我 我知道Stream是一个抽象类 因此无法实例化 但它具有派生自它的类 为什么有一个流阅读器类和一个流 Read 方法 反之亦然 流写入器 and 流 Write 您可以使用 300 万种不同的方法写入文本文件 但尝试了解所有
  • 角度材料 2 个选项卡滚动显示在导航上

    正如您在此示例中所看到的 当您更改选项卡时 动画上会出现垂直滚动条
  • 如何在 Android 中打开 PDF

    如何从服务器打开 pdf 文件而不将其保存在设备上且不使用任何第三方应用程序 因为我不希望我的用户下载任何应用程序来使用我的应用程序 而且我不想使用 Web 视图来打开 pdf文件 此方法适用于旧版本的android 在新活动中 WebVi
  • 使用 DataTable.js 的 js 源数据的单独列搜索过滤器,过滤器位于顶部

    我无法将过滤器选择放在顶部 我如何实现 我坚持使用 initComplete 选项 因为它仅在 DataTable 完全初始化后触发一次 并且可以安全地调用 API 方法 另外 我到底应该在哪里使列下拉值变得唯一 const dataSet
  • i18next加载json错误(404 Not Found)

    这是我在index html 的代码 p p
  • 将整数列表转换为逗号分隔的字符串

    我试图将整数列表转换为逗号分隔的整数字符串 Collectors joining CharSequence delimiter 返回一个按遇到顺序连接输入元素 由指定分隔符分隔 的收集器 List
  • AsyncTask 上的 Android 连接超时

    尝试让这个简单的下载和保存图像正常工作 但我不断收到连接超时异常 据我所知 该网址应该有效 new DownloadImageTask private class DownloadImageTask extends AsyncTask
  • 2 个 JUnit Assert 类之间的差异

    JUnit 框架包含 2Assert类 显然在不同的包中 和每个类的方法看起来非常相似 有人能解释这是为什么吗 我指的课程是 junit framework Assert http junit org junit javadoc 4 5 j
  • 跨 AppDomains 和进程的 TransactionScope

    跨不同的AppDomains和进程使用System Transactions 主要是TransactionScope 是真的吗 相关交易 http msdn microsoft com en us library system transa
  • 如何在 VB.NET 中使用 BeginInvoke

    在 C 中你使用BeginInvoke像这样 obj BeginInvoke Action gt do something 我尝试将其转换为 VB NET 最后得到了这段代码 看起来可行 obj BeginInvoke Sub do som
  • ASP.NET MVC 快速教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Pygame:如何让我的图像下降?

    我试图让物体像在地球上一样下落 我已经让它们到了我想要的地方 但我似乎无法为它们设置动画 这就是我想要落下的物体 import pygame class circle def init self screen planet color 25
  • 在 android 5 上膨胀类 android.webkit.WebView 时出错

    我在 Android 5 0 API 21 上进行测试时出现以下错误 在其他操作系统版本上测试效果良好 java lang RuntimeException 无法启动活动 ComponentInfo ui activities naviga
  • 如何在 VSCode 中复制代码行的 URL?

    当我使用 VSCode 工作并且需要将代码行 URL 从存储库发送给同事时 这种情况经常发生 VSCode 对此没有本机支持 如果您使用 Bitbucket 则 Atlassian 插件会启用一项功能 然而 我一直在寻找更通用的选择 我使用
  • 菜单被裁剪

    我有一个MFC项目 它支持 40 多种语言 我的电脑上有两个显示器 它们都是不同尺寸的显示器和不同的分辨率 如果我将应用程序移至较小的显示器上 则不会显示完整的语言菜单 我知道它会显示滚动条 为什么不是呢 我的菜单是标准菜单 没有什么花哨
  • “java.lang.ClassFormatError: Invalid pc in LineNumberTable”的可能原因

    今天我开始编写一个使用 sqlite 的项目 当我尝试测试它时 我收到了java lang ClassFormatError LineNumberTable 中的 pc 无效 希望你能帮助我 因为我迷路了 我搜索了这个错误 并发现了一些针对
  • GWT 列表框多选

    我需要添加一个列表框 组合框 允许用户选择多个值 我知道 GWT API 中已经有一个可用的ListBox http google web toolkit googlecode com svn javadoc 1 5 com google
  • 使用 Doctrine 和 Symfony2 查询多对多关系

    我试图理解 Doctrine 和 Symfony2 中的多对多关系是如何运作的 我重新创建了官方文档 goo gl GYcVE0 中显示的示例 并且我有两个实体类 User and Group正如你在下面看到的