在我的Symfony2应用程序中,人们可以编写将在网页上发布的文本。 可以选择编写新文本,您必须选择它所属的网页。
我想要实现的是,这个网页列表显示的网页还没有文字。否则,您将最终替换现有文本。
所以我想在我的表单类型 中写出类似 的内容:
$qb->select('wp')
->from('MyBundle:Webpage', 'wp')
->where('wp.webtexts is null')
->orderBy('wp.id');
问题出现在" wp.webtexts为null"声明。这是一个(完全正常的)多对多关系,我想测试这里是否没有关系。我收到的错误是:
[语义错误]第0行,第70行附近' webtexts为空':错误: 无效的PathExpression。 StateFieldPathExpression或 SingleValuedAssociationField预期。
如何查询与任何webtexts无关的网页?
加了:
我怎么能算出关系的数量?这种表示法:
$qb->where($qb->expr()->count('wp.webtexts < 1'))
...给我:
[语法错误]第0行,第85行:错误:预期 Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS,得到&#39;&lt;&#39;
答案 0 :(得分:4)
如果您尝试检查webtexts对象,则应查询webtexts id字段而不是webtexts对象。 Doctrine仍在尝试在一天结束时编写SQL,而在SQL中你必须查询一个字段:
$qb->select('wp')
->from('MyBundle:Webpage', 'wp')
->leftJoin('wp.webtexts', 'wt')
->where('wt.id IS NULL')
->orderBy('wp.id');
答案 1 :(得分:1)
像这样:
$em->createQuery('SELECT wp FROM MyBundle:Webpage wp LEFT JOIN wp.webtexts wt WHERE wt.id IS NULL ORDER BY wp.id');
它需要与文本连接或不连接的网页,然后消除与文本有关系的网页...所以你有网页没有关系!