我有一个关于学说中案件的问题。
问题在于,当某个用户使用uim.isProfileImage is
1时,该用户将返回该行以及user_image
表中的其他所有行。
我想要的是,如果有个人资料图像(isProfileImage
表中的user_image
为1,则同一用户只能有该值的一行)只给我该行,如果没有那样的话不会让我为空。
public function searchUsersByIds(array $ids)
{
$qb = $this->createQueryBuilder('user');
$qb->select('user.id', 'user.username');
$qb->addSelect('(CASE WHEN uim.isProfileImage = :isProfileImage THEН uim.imageFileName ELSE :null END) AS imageFileName');
$qb->leftJoin('user.userImages','uim');
$qb->add('where', $qb->expr()->in('user.id', ':ids'));
$qb->setParameter('ids', $ids);
$qb->setParameter('isProfileImage', 1);
$qb->setParameter('null', null);
return $qb->getQuery()->getResult();
}
所以它应该看起来像这样: 带有个人资料图片:
userId => 1,
username => 'Mark',
imageFileName => 'someFileName'
并且没有个人资料图片:
userId => 1,
username => 'Mark',
imageFileName => null
此外,由于有一个in expr,它应该与传递给此函数的多个id一起使用。 预先感谢。
答案 0 :(得分:0)
尝试一下:
public function searchUsersByIds(array $ids)
{
$qb = $this->createQueryBuilder('user');
$qb->select('user.id', 'user.username');
$qb->addSelect('uim.imageFileName AS imageFileName');
$qb->leftJoin('user.userImages','uim', 'with', 'uim.isProfileImage = :isProfileImage');
$qb->add('where', $qb->expr()->in('user.id', ':ids'));
$qb->setParameter('ids', $ids);
$qb->setParameter('isProfileImage', 1);
$qb->setParameter('null', null);
return $qb->getQuery()->getResult();
}