gpt4 book ai didi

doctrine - 在Doctrine实体管理器中的Symfony2子查询

转载 作者:行者123 更新时间:2023-12-04 13:20:31 24 4
gpt4 key购买 nike

我需要执行以下查询:

SELECT * FROM (SELECT * FROM product WHERE car = 'large' ORDER BY onSale DESC) AS product_ordered GROUP BY type

在Symfony2中使用实体管理器。

我的基本查询生成器将是:
 $query = $em->getRepository('AutomotiveBundle:Car')
->createQueryBuilder('p')
->where('pr.car = ?1')
->andWhere('pr.status = 1')
->orderBy('pr.onSale', 'DESC')
->setParameter(1, $product->getName())
->groupBy('p.type')
->getQuery();

但是我不知道如何在此添加子查询。

香港专业教育学院试图做一个单独的查询,并加入它像:
 ->andWhere($query->expr()->in('pr.car = ?1',$query2->getQuery()));

但我得到:
Call to undefined method Doctrine\ORM\Query::expr()

最佳答案

一个技巧是建立两个查询,然后使用getDQL()将第一个查询提供给第二个查询。

例如,此查询返回不同的游戏ID列表:

    $qbGameId = $em->createQueryBuilder();

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

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

$qbGameId->leftJoin('gameGameId.teams','gameTeamGameId');

if ($date1) $qbGameId->andWhere($qbGameId->expr()->gte('gameGameId.date',$date1));
if ($date2) $qbGameId->andWhere($qbGameId->expr()->lte('gameGameId.date',$date2));

现在使用dql获取有关游戏本身的其他信息:
    $qbGames = $em->createQueryBuilder();

$qbGames->addSelect('game');
$qbGames->addSelect('gameTeam');
$qbGames->addSelect('team');
$qbGames->addSelect('field');

$qbGames->addSelect('gamePerson');
$qbGames->addSelect('person');

$qbGames->from('ZaysoCoreBundle:Event','game');

$qbGames->leftJoin('game.teams', 'gameTeam');
$qbGames->leftJoin('game.persons', 'gamePerson');
$qbGames->leftJoin('game.field', 'field');

$qbGames->leftJoin('gameTeam.team', 'team');
$qbGames->leftJoin('gamePerson.person', 'person');

// Here is where we feed in the dql
$qbGames->andWhere($qbGames->expr()->in('game.id',$qbGameId->getDQL()));

这是一个很长的例子,但我不想编辑出来的东西,也许会破坏它。

关于doctrine - 在Doctrine实体管理器中的Symfony2子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9622002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com