Eccube\Repository\ProductRepository::getQueryBuilderBySearchDataForAdmin PHP Method

getQueryBuilderBySearchDataForAdmin() public method

get query builder.
public getQueryBuilderBySearchDataForAdmin ( array $searchData ) : Doctrine\ORM\QueryBuilder
$searchData array
return Doctrine\ORM\QueryBuilder
    public function getQueryBuilderBySearchDataForAdmin($searchData)
    {
        $qb = $this->createQueryBuilder('p')->innerJoin('p.ProductClasses', 'pc');
        // id
        if (isset($searchData['id']) && Str::isNotBlank($searchData['id'])) {
            $id = preg_match('/^\\d+$/', $searchData['id']) ? $searchData['id'] : null;
            $qb->andWhere('p.id = :id OR p.name LIKE :likeid OR pc.code LIKE :likeid')->setParameter('id', $id)->setParameter('likeid', '%' . $searchData['id'] . '%');
        }
        // code
        /*
         if (!empty($searchData['code']) && $searchData['code']) {
             $qb
                 ->innerJoin('p.ProductClasses', 'pc')
                 ->andWhere('pc.code LIKE :code')
                 ->setParameter('code', '%' . $searchData['code'] . '%');
         }
        
         // name
         if (!empty($searchData['name']) && $searchData['name']) {
             $keywords = preg_split('/[\s ]+/u', $searchData['name'], -1, PREG_SPLIT_NO_EMPTY);
             foreach ($keywords as $keyword) {
                 $qb
                     ->andWhere('p.name LIKE :name')
                     ->setParameter('name', '%' . $keyword . '%');
             }
         }
        */
        // category
        if (!empty($searchData['category_id']) && $searchData['category_id']) {
            $Categories = $searchData['category_id']->getSelfAndDescendants();
            if ($Categories) {
                $qb->innerJoin('p.ProductCategories', 'pct')->innerJoin('pct.Category', 'c')->andWhere($qb->expr()->in('pct.Category', ':Categories'))->setParameter('Categories', $Categories);
            }
        }
        // status
        if (!empty($searchData['status']) && $searchData['status']->toArray()) {
            $qb->andWhere($qb->expr()->in('p.Status', ':Status'))->setParameter('Status', $searchData['status']->toArray());
        }
        // link_status
        if (isset($searchData['link_status'])) {
            $qb->andWhere($qb->expr()->in('p.Status', ':Status'))->setParameter('Status', $searchData['link_status']);
        }
        // stock status
        if (isset($searchData['stock_status'])) {
            $qb->andWhere('pc.stock_unlimited = :StockUnlimited AND pc.stock = 0')->setParameter('StockUnlimited', $searchData['stock_status']);
        }
        // crate_date
        if (!empty($searchData['create_date_start']) && $searchData['create_date_start']) {
            $date = $searchData['create_date_start']->format('Y-m-d H:i:s');
            $qb->andWhere('p.create_date >= :create_date_start')->setParameter('create_date_start', $date);
        }
        if (!empty($searchData['create_date_end']) && $searchData['create_date_end']) {
            $date = clone $searchData['create_date_end'];
            $date = $date->modify('+1 days')->format('Y-m-d H:i:s');
            $qb->andWhere('p.create_date < :create_date_end')->setParameter('create_date_end', $date);
        }
        // update_date
        if (!empty($searchData['update_date_start']) && $searchData['update_date_start']) {
            $date = $searchData['update_date_start']->format('Y-m-d H:i:s');
            $qb->andWhere('p.update_date >= :update_date_start')->setParameter('update_date_start', $date);
        }
        if (!empty($searchData['update_date_end']) && $searchData['update_date_end']) {
            $date = clone $searchData['update_date_end'];
            $date = $date->modify('+1 days')->format('Y-m-d H:i:s');
            $qb->andWhere('p.update_date < :update_date_end')->setParameter('update_date_end', $date);
        }
        // Order By
        $qb->orderBy('p.update_date', 'DESC');
        return $qb;
    }

Usage Example

 /**
  * 商品検索用のクエリビルダを返す.
  *
  * @param Request $request
  * @return \Doctrine\ORM\QueryBuilder
  */
 public function getProductQueryBuilder(Request $request)
 {
     $session = $request->getSession();
     if ($session->has('eccube.admin.product.search')) {
         $searchData = $session->get('eccube.admin.product.search');
     } else {
         $searchData = array();
     }
     // 商品データのクエリビルダを構築.
     $qb = $this->productRepository->getQueryBuilderBySearchDataForAdmin($searchData);
     return $qb;
 }