(可能我的问题的解决方案很简单,但我一直在搜索超过一个小时但我还没有找到任何东西。)
我有两个实体,X和Y,它们之间有双向关系。对于X对象,我会做类似anXObject->getY()
的操作来获取与anXObject关联的所有Y对象。
我怎样才能获得前一个语句返回的对象(可能已排序)的子集(可能使用DQL语句或其他一些Doctrine特定的机制)?
我可以使用SQL创建它,使用Doctrine创建的X_Y
关联表,但我很好奇它是否只能用DQL完成。 (据我所知,无法从DQL访问该关联表。)
更新
以下是我的实体(为简洁起见,我已删除了不必要的内容):http://paste.pocoo.org/show/512177/
为了澄清,我想要做的是获取所有具有特定标记的Serial对象。
答案 0 :(得分:1)
你正在使用yml - 我对注释很熟悉。我想这是正确的。
首先,这值得一读:
您需要明确设置两个实体之间的关系,这是我忘记做几次的事情。
假设关系全部正确并且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?
无论如何,根据我的经验,重要的是确保关系被持久化到连接表。
希望这会有所帮助:)