Blo*_*kas 5 php doctrine subquery symfony
尝试按用户获取喜欢的状态。
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();
}
Run Code Online (Sandbox Code Playgroud)
错误:无效的参数编号:绑定变量的数量与令牌的数量不匹配
顺便说一句:当我转储$ qb-> getDQL()时:
string 'SELECT s.id FROM TB\WBundle\Entity\Likes l LEFT JOIN l.status s WHERE l.user = :user' (length=87)
Run Code Online (Sandbox Code Playgroud)
BTW2:当我用(12073)(状态ID)替换'$ qb-> getDQL()'时,它起作用了...
由于原则在使用子查询时不支持限制(请参阅我的评论),一种可能的解决方案是执行两个单独的查询,这并不理想,但可行。
/**
* @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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3950 次 |
| 最近记录: |