WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
EC-CUBE
システム開発
[EC-CUBE]クエリビルダのソートでnullを最後にする方法
システム開発担当のTFです。
やり方
- SELECT で case を用いて null なら 1 になるカラムを追加
- orderByでそのカラムをASCする
サンプル
public function getSearchQB($getData = [])
{
$qb = $this->createQueryBuilder("rp");
$qb->leftJoin("Eccube\Entity\Category", "ca", \Doctrine\ORM\Query\Expr\Join::WITH, 'ca.id = rp.Category');
$qb->leftJoin("Eccube\Entity\ProductClass", "pc", \Doctrine\ORM\Query\Expr\Join::WITH, 'pc.Product = rp.Product');
$qb->addSelect('(case when ca.name IS NULL then 1 else 0 end) as HIDDEN category_name_is_null ');
if( isset($getData['multi']) && !empty($getData['multi']) ){
$qb->andWhere("ca.name LIKE :category_name OR pc.code LIKE :product_code");
$qb->setParameter("category_name", '%'.$getData['multi'].'%');
$qb->setParameter("product_code", '%'.$getData['multi'].'%');
}
$qb->orderBy("category_name_is_null", 'ASC');
$qb->addOrderBy("ca.name", 'ASC');
$qb->addOrderBy("pc.code", 'ASC');
$qb->addOrderBy("rp.id", 'ASC');
return $qb;
}