Symfony 在多人主义queryBuilder()中选择ForeignKey为NULL的实体时出现查询异常

Symfony 在多人主义queryBuilder()中选择ForeignKey为NULL的实体时出现查询异常,symfony,doctrine-orm,many-to-many,query-builder,dql,Symfony,Doctrine Orm,Many To Many,Query Builder,Dql,在我的Symfony项目中,我有两个实体Product.php和Configuration.php 这是一种多方面的关系 这是Product.php中的关系: 这是Configuration.php: 在页面中,我需要恢复没有某些配置的产品,例如FK配置为空 因此,我在Productrepository.php中创建了这个queryBuilder/dql: 如果我只返回第一个查询,例如$selectProduct,那么第一步效果很好。它只返回配置为$slug的产品。 但如果我返回第二个查询,返回

在我的Symfony项目中,我有两个实体Product.php和Configuration.php

这是一种多方面的关系

这是Product.php中的关系:

这是Configuration.php:

在页面中,我需要恢复没有某些配置的产品,例如FK配置为空

因此,我在Productrepository.php中创建了这个queryBuilder/dql:

如果我只返回第一个查询,例如$selectProduct,那么第一步效果很好。它只返回配置为$slug的产品。 但如果我返回第二个查询,返回下面的代码,则会发生错误:

2/2[语法错误]第0行第69列:错误:应为 条令\ORM\Query\Lexer::T_FROM,get','

1/2查询例外:从MyBundle中选择请购单:产品请购单,其中请购单id不是 从MyBundle中选择p、wt、c:产品p内部连接p.workType 带wt.id的wt=p.workType内部连接p.c,其中wt.slug =:slug

如何修复此错误

编辑 我在我的ProductRepository.php中尝试了另一个解决方案:

现在是我的控制器,如果它能帮助您:

$em = $this->getDoctrine()->getManager();
$arrayProduct = $this->getDoctrine()->getRepository('MyBundle:Product')->getProductForCurrentWorkType($slug);

if (!$arrayProduct) {
    throw $this->createNotFoundException('Unable to find a Product !');
}

//return statement
下面的代码返回我找不到产品!,如果我使用throw$this->createNotFoundException删除If条件,则页面显示正确,但没有结果。

尝试使用此条件:

$qb->select('p')
   ->from('Product','p')
   ->leftJoin('p.configurations','c')
   ->having('COUNT(c.id) = 0') // check if the collection is empty
   ->groupBy('p.id');
试试这个:

$qb->select('p')
   ->from('Product','p')
   ->leftJoin('p.configurations','c')
   ->having('COUNT(c.id) = 0') // check if the collection is empty
   ->groupBy('p.id');

我已经尝试过这个查询了,当我的数据库中有很多匹配的记录时,它不会返回任何结果可能还有其他的where子句返回一个空结果你能说一下你用这一个做了什么吗改变连接左连接我只是意识到我最初用close的查询与你的建议不完全一样,我只是在你写的时候尝试一下你的整个答案,很抱歉没有像你写的那样测试代码。如果愿意,您可以编辑您的答案,但是您的查询生成器工作得很好。顺便说一句,谢谢。我想用闭包->不在找到解决方案,但你的回答就足够了。你救了我一天。你太棒了!我已经尝试过这个查询了,当我的数据库中有很多匹配的记录时,它不会返回任何结果可能还有其他的where子句返回一个空结果你能说一下你用这一个做了什么吗改变连接左连接我只是意识到我最初用close的查询与你的建议不完全一样,我只是在你写的时候尝试一下你的整个答案,很抱歉没有像你写的那样测试代码。如果愿意,您可以编辑您的答案,但是您的查询生成器工作得很好。顺便说一句,谢谢。我想用闭包->不在找到解决方案,但你的回答就足够了。你救了我一天。你太棒了!
$selectProduct = $this->getEntityManager()->createQueryBuilder();

    $selectProduct
      ->select('p, wt, c')
      ->from('MyBundle:Product', 'p')
      ->join('p.workType', 'wt', 'WITH', 'wt.id = p.workType')
      ->join('p.configurations', 'c')
      ->having('COUNT(c.id) = 0') // check if the collection is empty
      ->where('wt.slug = :slug')
      ->setParameters(array('slug' => $slug));

      return $selectProduct
            ->getQuery()
            ->getResult();
$em = $this->getDoctrine()->getManager();
$arrayProduct = $this->getDoctrine()->getRepository('MyBundle:Product')->getProductForCurrentWorkType($slug);

if (!$arrayProduct) {
    throw $this->createNotFoundException('Unable to find a Product !');
}

//return statement
$qb->select('p')
   ->from('Product','p')
   ->leftJoin('p.configurations','c')
   ->having('COUNT(c.id) = 0') // check if the collection is empty
   ->groupBy('p.id');