5

ユーザーが好きなステータスを取得しようとしています。

public function getLikedStatuses(User $user)
{
    $qb = $this->_em->createQueryBuilder();
                $qb
                ->select('s.id')
                ->from('WallBundle:Likes','l')
                ->innerJoin('l.status', 's')
                ->where('l.user = :user')
                ->setParameter('user', $user)
                ->orderBy('s.id','DESC')
            ;

    $qb2=  $this->_em->createQueryBuilder()
        ->select('st')
        ->from('WallBundle:Status','st');

       $qb2 ->andWhere($qb2->expr()->in('st.id',$qb->getDQL()));


    return $qb2->getQuery()->getResult();
}

エラー: パラメーター番号が無効です: バインドされた変数の数がトークンの数と一致しません

ところで: $qb->getDQL() をダンプすると:

string 'SELECT s.id FROM TB\WBundle\Entity\Likes l LEFT JOIN l.status s WHERE l.user = :user' (length=87)

BTW2: (12073) (ステータスの ID) の '$qb->getDQL()' を置き換えると動作します...

4

4 に答える 4

0

これを変更してみてください

$qb2=  $this->_em->createQueryBuilder()
        ->select('st')
        ->from('WallBundle:Status','st');
$qb2 ->andWhere($qb2->expr()->in('st.id',$qb->getDQL()));

 $qb2=  $this->_em->createQueryBuilder()
        ->select('st')
        ->from('WallBundle:Status','st');
        ->where($qb2->expr()->in('st.id',$qb->getDQL()));
于 2013-04-08T15:56:09.480 に答える
0

サブクエリを使用する場合、ドクトリンは制限をサポートしていないため (私のコメントを見てください)、考えられる解決策の 1 つは、理想的ではありませんが機能する 2 つの個別のクエリを実行することです。

/**
 * @param User $user
 * @param int $limit
 * @param int $offset
 * @return User[]
 */
public function getUserFollowers(User $user, $limit = 20, $offset = 0)
{
    $_followersIds = $this->getEntityManager()
        ->createQueryBuilder()
        ->select('IDENTITY(r.followeduser)')
        ->from($this->getEntityName(), 'r')
        ->where('r.followeeuser = :user')
        ->andWhere('r.followeduser !=:user')
        ->setParameter('user', $user)
        ->orderBy('r.id', 'DESC')
        ->setFirstResult($offset)
        ->setMaxResults($limit)
        ->getQuery()
        ->getResult();

    $_usersQb = $this->getEntityManager()->createQueryBuilder();
    $_usersQb
        ->select('u')
        ->from('UserBundle:User', 'u')
        ->where('u.id IN (:followersIds)')
        ->setParameter('followersIds', array_values($_followersIds));

    return $_usersQb->getQuery()->getResult();
}
于 2015-09-26T17:35:16.367 に答える
0

->where('l.user = :user')これを置き換えてwhere('l.user = ?1') 追加してみてください$qb->setParameter(1, $yourValue);

于 2013-04-08T11:19:34.740 に答える