Doctrine2 通过 QueryBuilder 获取具有多对多关联的行
每个人。 我有 2 个实体 City 和 POI。映射看起来像这样:
class City {
/**
* @ORM\ManyToMany(targetEntity="POI", mappedBy="cities")
* @ORM\OrderBy({"position" = "ASC"})
*/
protected $pois;
我
class POI {
/**
* @ORM\ManyToMany(targetEntity="City", inversedBy="pois")
* @ORM\JoinTable(name="poi_cities")
*/
protected $cities;
想使用 QueryBuilder 获取与某个城市至少有 1 个关联的所有 POI。我可能应该使用exists()函数,但我不知道如何使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须
Left join
它们并检查cities
是否为空。我还没有测试过,但我希望它能为您提供总体方向。您可以从 QueryBuilder 的更多信息“noreferrer”>此处。
You'd have to
Left join
them and check ifcities
is null.I haven't tested it, but I hope it gives you the general direction. You can read more about the
QueryBuilder
from here.Docrine2 于 2013 年进行了更改,因此另一个解决方案显示错误
错误:无法在非结果变量上添加条件。
现在我们不能仅将连接别名用作条件变量。我们应该使用它的任何属性,例如c.id
因此,您应该将代码修复为
如果您想选择没有任何城市的实体,请使用
IS空。
问题描述以及负责该问题的提交链接 - http://www .doctrine-project.org/jira/browse/DDC-2780
Docrine2 was changed in 2013, so the other solution displays error
Error: Cannot add having condition on a non result variable.
Now we cannot use joined alias just as a condition variable. We should use any of its properties likec.id
So you should fix the code to
If you want to select entities that does not have any cities, use
IS NULL
.Description of a problem and link to the commit that responsible for that - http://www.doctrine-project.org/jira/browse/DDC-2780