【问题标题】:Doctrine QueryBuilder - CASE WHENDoctrine QueryBuilder - CASE WHEN
【发布时间】:2020-01-10 14:47:10
【问题描述】:

我对教义中的案例有疑问。 问题是当uim.isProfileImage is 1 为用户返回该行和user_image 表中该用户的所有其他行时。 我想要的是,如果有个人资料图片(isProfileImageuser_image 表中为 1,同一用户只能有一行具有该值)只给我那一行,如果没有类似这给了我null。

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 一起工作。 提前致谢。

【问题讨论】:

标签: php symfony doctrine


【解决方案1】:

试试这个:

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();
}

【讨论】:

  • 非常感谢,您为我节省了很多时间。 :D
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
相关资源
最近更新 更多