带有数组的Doctrine2 $ qb-> expr方法

时间:2014-03-05 13:51:49

标签: php symfony doctrine-orm

我使用此代码;

public function findConversation($users)
    {
        $qb = $this->createQueryBuilder("c");
        $qb->leftJoin('c.users','u')
            ->andWhere($qb->expr()->in('u', $users))
            ->getQuery()
            ->getSingleResult();
    }

但是,$ qb-> expr方法会出错;

  

ContextErrorException:Catchable Fatal Error:类bla bla的对象   转换为字符串   C:\ \的Symfony \供应商\学说XAMPP \ htdocs中\ ORM \ LIB \原则\ ORM \查询\ Expr.php   第618行

哪种方法更适合条件使用数组?

2 个答案:

答案 0 :(得分:0)

您应该使用用户ID数组作为参数。

代码:

$qb->expr()->in('u', array_map(function($user) { return $user->getId(); }, $users))

答案 1 :(得分:0)

这是我的解决方案。

代码:

$qb = $this->_em->createQueryBuilder();

$notInUsers = $qb->select('u.id')
    ->from('Group', 'g')
    ->innerJoin('g.user', 'u')
    ->getQuery()
    ->getResult(Query::HYDRATE_ARRAY);

$qb = $this->_em->createQueryBuilder();
$users = $qb->select('u')
         ->from('User', 'u')
         ->where($qb->expr()->notIn('u.id', array_map(function($notInUsers) { return $notInUsers['id']; }, $notInUsers)))
         ->getQuery()
         ->getResult(Query::HYDRATE_ARRAY);