相关疑难解决方法(0)

在Doctrine 2中执行WHERE .. IN子查询

我想从具有特定商品的所有订单中选择订单商品.在SQL中我会这样做:

SELECT DISTINCT i.id, i.name, order.name 
FROM items i 
JOIN orders o ON i.order_id=o.id 
WHERE o.id IN (
   SELECT o2.id FROM orders o2
   JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

如何使用查询构建器执行此查询?

sql database doctrine-orm

56
推荐指数
2
解决办法
7万
查看次数

doctrine2中的子查询notIN函数

我想选择没有特定服务的会员.我有3张桌子:

  • membre
  • service
  • membre_service(membre和之间的关系service)

我正在使用doctrine 2,在SQL中我的查询是:

SELECT m.* FROM membre m WHERE m.`id` NOT IN (
    SELECT ms.membre_id FROM membre_service ms WHERE ms.service_id != 29
)
Run Code Online (Sandbox Code Playgroud)

在Doctrine,我做:

$qb  = $this->_em->createQueryBuilder();
$qb2 = $qb;
$qb2->select('m.id')
        ->from('Custom\Entity\MembreService', 'ms')
        ->leftJoin('ms.membre', 'm')
        ->where('ms.id != ?1')
        ->setParameter(1, $service);

    $qb  = $this->_em->createQueryBuilder();
    $qb->select('m')
        ->from('Custom\Entity\Membre', 'm')
        ->where($qb->expr()->notIn('m.id', $qb2->getDQL())
    );
    $query  = $qb->getQuery();
    //$query->useResultCache(true, 1200, __FUNCTION__);

    return $query->getResult();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

语义错误]第0行,第123页'm WHERE ms.id'附近:错误:'m'已经定义.

php query-builder doctrine-orm

24
推荐指数
3
解决办法
5万
查看次数

如何使用Doctrine 2中的QueryBuilder使用SELECT子查询创建LEFT JOIN?

我需要限制LEFT JOIN结果,所以我必须使用子查询.有人可以给我建议如何用Doctrine 2做到这一点?

我现在拥有的是:

  $qb = $this->_em->createQueryBuilder();
    return $qb->add('select', 'c,j')
             ->add('from', 'JobeetBundle:Category c')
             ->leftJoin('c.jobs', 'j', 'WITH', 'j.category = c')
             ->add('where', 'j.expiresAt > ?1')
             ->add('orderBy','j.expiresAt DESC')
             ->setParameter(1, new \DateTime())
             ->getQuery()
             ->getResult();
Run Code Online (Sandbox Code Playgroud)

但我必须改变它,将每个类别的工作结果限制在10.

mysql left-join symfony doctrine-orm

5
推荐指数
1
解决办法
1万
查看次数

DQL中的嵌套子查询中的错误:未定义类'('

我有一个DQL,如下所示:

SELECT at, count(at.id) FROM AccountTriple at JOIN at.property p JOIN at.account ac WHERE p.create_analytics = '1' GROUP BY at.property, at.value, ac.service
Run Code Online (Sandbox Code Playgroud)

如您所见,它具有三个联接。由于“ at”和“ ac”都具有大量数据。为了优化它,我尝试在连接到“ ac”之前移动“ p.create_analytics ='1'”检查,以便为它提供一个较小的要连接的数据集。我正在尝试实现以下目标:

SELECT at, count(at.id) FROM ( SELECT at FROM AccountTriple at JOIN at.property p WHERE p.create_analytics = '1' ) JOIN at.account ac  GROUP BY at.property, at.value, ac.service
Run Code Online (Sandbox Code Playgroud)

但是以某种方式,我的语法不起作用。错误消息如下所示:

语义错误]行0,第29行靠近'((在FROM处的选择):错误:类'('未定义。

在其他任何地方也找不到类似的示例。有谁能帮助修复此DQL查询以使其正常工作?提前致谢。

php mysql doctrine dql doctrine-orm

5
推荐指数
1
解决办法
2823
查看次数

在Doctrine中使用LIMIT的子查询

我正在尝试使用Doctrine进行子查询的查询.现在它给了我一个错误.我在存储库中的功能是:

public function getRecentPlaylists($count = 3) {


    $q = $this->_em->createQuery("
            SELECT p.id,
            p.featuredImage,
            p.title,
            p.slug,         
            a.firstName,
            a.lastName,
            a.slug as authorSlug,
            (SELECT updated 
                     FROM \Entities\Articles 
                     ORDER BY updated DESC LIMIT 1) as updated
            FROM \Entities\Playlist p
            JOIN \Entities\Account a
                        ON p.account_id = a.id
            ")
        ->setMaxResults($count);

            try{    
            return $q->getResult();
            }catch(Exception $e){
                echo $e->message();
            }

}
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

[Semantical Error] line 0, col 210 near 'LIMIT 1) as updated FROM': Error: Class 'LIMIT' is not defined.
Run Code Online (Sandbox Code Playgroud)

我几乎放弃了Doctrine,我无法弄清楚如何使用子查询或带有子查询的联合进行查询.有什么帮助这个功能?谢谢!

php mysql zend-framework symfony doctrine-orm

3
推荐指数
3
解决办法
5319
查看次数