1

在我的 Symfony2 应用程序中,人们可以编写将发布在网页上的文本。有一个编写新文本的选项,您必须选择它所属的网页。

我想要实现的是,此网页列表仅显示还没有文本的网页。否则,您最终将替换现有文本。

所以我想在我的表单类型中写这样的东西:

$qb->select('wp')
->from('MyBundle:Webpage', 'wp')
->where('wp.webtexts is null')
->orderBy('wp.id');

问题出现在“wp.webtexts is null”语句周围。这是一个(功能齐全的)多对多关系,我想测试这里是否没有关系。我收到的错误是:

[语义错误] 第 0 行,第 70 列“webtexts 为空”附近:错误:无效的 PathExpression。需要 StateFieldPathExpression 或 SingleValuedAssociationField。

如何查询与任何网络文本无关的网页?

添加:

我如何计算关系的数量?这个符号:

 $qb->where($qb->expr()->count('wp.webtexts < 1'))

...给我:

[语法错误] 第 0 行,第 85 列:错误:预期的 Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS,得到 '<'

4

2 回答 2

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');
于 2013-01-08T13:03:48.497 回答
1

像这样:

$em->createQuery('SELECT wp FROM MyBundle:Webpage wp LEFT JOIN wp.webtexts wt WHERE wt.id IS NULL ORDER BY wp.id');

它需要加入或不加入文本的网页,然后消除那些与文本有关系的网页......所以你有没有关系的网页!

于 2013-01-08T13:18:57.070 回答