在DQL查询或等效查询中使用Doctrine关联表

时间:2011-11-24 01:11:37

标签: symfony1 doctrine dql

(可能我的问题的解决方案很简单,但我一直在搜索超过一个小时但我还没有找到任何东西。)

我有两个实体,X和Y,它们之间有双向关系。对于X对象,我会做类似anXObject->getY()的操作来获取与anXObject关联的所有Y对象。

我怎样才能获得前一个语句返回的对象(可能已排序)的子集(可能使用DQL语句或其他一些Doctrine特定的机制)?

我可以使用SQL创建它,使用Doctrine创建的X_Y关联表,但我很好奇它是否只能用DQL完成。 (据我所知,无法从DQL访问该关联表。)


更新

以下是我的实体(为简洁起见,我已删除了不必要的内容):http://paste.pocoo.org/show/512177/

为了澄清,我想要做的是获取所有具有特定标记的Serial对象。

1 个答案:

答案 0 :(得分:1)

你正在使用yml - 我对注释很熟悉。我想这是正确的。

首先,这值得一读:

http://www.doctrine-project.org/docs/orm/2.1/en/reference/association-mapping.html#picking-owning-and-inverse-side

您需要明确设置两个实体之间的关系,这是我忘记做几次的事情。

假设关系全部正确并且fks被写入连接表,您应该能够使用DQL执行一些额外的操作:

$query = $em->createQuery('
    SELECT s, t 
    FROM FooBarBundle:Serial s 
    JOIN s.tags t 
    WHERE t.name = "baz" 
    ORDER BY t.id ASC
');

请注意tags的别名位于字段列表中;我相信这被称为fetch join?

无论如何,根据我的经验,重要的是确保关系被持久化到连接表。

希望这会有所帮助:)