Symfony2.3.​​1中具有Doctrine 2的IN(子查询)的Where-Condition不起作用

时间:2013-08-26 15:38:34

标签: symfony doctrine-orm where subquery

----完成Symfony2.3.​​1和Doctrine2 ----

抱歉,我希望我找到合适的解决方案来解决我的问题并不是太愚蠢。我试着建立一个查询几个小时。

SELECT * FROM product
    WHERE product_id in
    (
       SELECT product_id from (
          SELECT count(*) as result_amount, product_id FROM product_x_attribut
          JOIN productattribut on productattribut_id = productattribut.id
          WHERE (
            productkey = "price" and
            stringType = "premium"
          ) or (
            productkey = "size" and 
            stringType = "S"
          )
          GROUP BY product_id
          HAVING result_amount = 2
       ) as temp
    )
GROUP BY product_id
ORDER BY p0_.name ASC

这是在phpmyAdmin中正常运行的SQL。

这可以看作是

Select * from abc where abc.x in ( Select * from ( select * from ) as abcd )

所以有一个核心查询,我称之为subSubQuery,核心周围的第二个查询将被称为subQuery,外部Query只是外部查询,没有子查询。 我可以使用Doctrine2构建subSubQuery。

但我不能像这样构建子查询

Select product_id from ( $subSubQuery->getQuery()->getDQL() )

我想像这样做

的子查询
$subQuery = $repositoryProduct->createQueryBuilder('product');
$subQuery->add('select', 'product_id');
$subQuery->add('from',$subSubQuery->getDQL() );
// However to set an alias is a miracle for me, this didnt work off course
$subQuery->add('as','tmp' );

这是子查询。 我也无法构建外部查询

Select * from abc where abc.x in ( $subQuery->getQuery()->getDQL() )

我想这样做

$query->where(
  $query->expr()->in('product.id', $subQuery->getDQL() )
);

但我尝试使用Doctrine2构建这个:

我很失望,我试过 - > gt; getSQL(), - > getDQL(),我试过尽可能多地检测到这个问题的解决方案是一个合适的小步骤我试过谷歌中的很多关键词,因为我的手指能写...我希望有人可以帮我找到解决方案...

非常感谢每个有用的建议。

1 个答案:

答案 0 :(得分:0)

我知道像这样的陈述:

$qbGames->andWhere($qbGames->expr()->in('game.id',$qbGameId->getDQL()));

你的问题很难理解。考虑使用pastebin显示当前存在的所有映射。然后可能会提出一个简单的查询?

我的$ qbGameId查询是使用以下内容构建的:

   $qbGameId = $em->createQueryBuilder();

   $qbGameId->addSelect('distinct gameGameId.id');

   $qbGameId->from('ZaysoCoreBundle:Event','gameGameId');

   // Assorted joins and where conditions