app/Plugin/CustomerReview42/Repository/CustomerReviewListRepository.php line 85

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomerReview42\Repository;
  3. use Eccube\Util\StringUtil;
  4. use Eccube\Repository\AbstractRepository;
  5. use Plugin\CustomerReview42\Entity\CustomerReviewList;
  6. use Plugin\CustomerReview42\Entity\CustomerReviewStatus;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. class CustomerReviewListRepository extends AbstractRepository
  9. {
  10.     /**
  11.      * CustomerReviewListRepository constructor.
  12.      *
  13.      * @param ManagerRegistry $registry
  14.      */
  15.     public function __construct(ManagerRegistry $registry)
  16.     {
  17.         parent::__construct($registryCustomerReviewList::class);
  18.     }
  19.     /**
  20.      * @param int $id
  21.      * @return null|CustomerReviewList
  22.      */
  23.     public function get($id)
  24.     {
  25.         return $this->find($id);
  26.     }
  27.     /**
  28.      * get query builder.
  29.      *
  30.      * @param  array $searchData
  31.      *
  32.      * @return \Doctrine\ORM\QueryBuilder
  33.      */
  34.     public function getQueryBuilderBySearchData($searchData)
  35.     {
  36.         $qb $this->createQueryBuilder('r')
  37.                 ->andWhere('r.Status = :status' )
  38.                 ->setParameter('status'CustomerReviewStatus::SHOW);
  39.         // 商品
  40.         if (!empty($searchData['product_id']) && $searchData['product_id']) {
  41.             $qb
  42.                 ->andWhere('r.Product = :product_id' )
  43.                 ->setParameter('product_id'$searchData['product_id']);
  44.         }
  45.         // 評価
  46.         $search_recommend_level false;
  47.         if (!empty($searchData['star']) && $searchData['star']) {
  48.             $qb->andWhere('r.recommend_level = :recommend_level' )
  49.                 ->setParameter('recommend_level'$searchData['star']);
  50.             $search_recommend_level true;
  51.         }
  52.         // Order By
  53.         if (!empty($searchData['orderby']) && $searchData['orderby'] == CustomerReviewList::POST_OLDER ) {
  54.         // 投稿日が古い順
  55.             $qb->OrderBy('r.create_date''ASC');
  56.         } else if (!$search_recommend_level && !empty($searchData['orderby']) && $searchData['orderby'] == CustomerReviewList::RECOMMEND_HIGHER ) {
  57.         // 評価が高い順
  58.             $qb->OrderBy('r.recommend_level''DESC');
  59.             $qb->addOrderBy('r.create_date''DESC');
  60.         } else if (!$search_recommend_level && !empty($searchData['orderby']) && $searchData['orderby'] == CustomerReviewList::RECOMMEND_LOWER ) {
  61.         // 評価が低い順
  62.             $qb->OrderBy('r.recommend_level''ASC');
  63.             $qb->addOrderBy('r.create_date''DESC');
  64.         } else {
  65.         // 投稿日が新しい順
  66.             $qb->OrderBy('r.create_date''DESC');
  67.         }
  68.         return $qb;
  69.     }
  70.     /**
  71.      * @param int $product_id
  72.      * @param int $limit
  73.      * @return null|CustomerReviewList
  74.      */
  75.     public function getReviewList($product_id$limit 0)
  76.     {
  77.         $searchData['product_id'] = $product_id;
  78.         $qb $this->getQueryBuilderBySearchData($searchData);
  79.         if ( is_numeric($limit) && $limit != )
  80.         {
  81.             $qb->setMaxResults($limit);
  82.         }
  83.         return $qb->getQuery()->getResult();
  84.     }
  85.     /**
  86.      * get query builder.
  87.      *
  88.      * @param  array $searchData
  89.      *
  90.      * @return \Doctrine\ORM\QueryBuilder
  91.      */
  92.     public function getQueryBuilderBySearchDataForAdmin($searchData)
  93.     {
  94.         $qb $this->createQueryBuilder('r')
  95.             ->addSelect('p')
  96.             ->innerJoin('r.Product''p');
  97.         // 商品
  98.         if (!empty($searchData['product_id']) && $searchData['product_id']) {
  99.             $qb
  100.                 ->andWhere('r.Product = :product_id' )
  101.                 ->setParameter('product_id'$searchData['product_id']);
  102.         }
  103.         // 投稿ユーザ
  104.         if (!empty($searchData['customer_id']) && $searchData['customer_id']) {
  105.             $qb
  106.                 ->andWhere('r.Customer = :customer_id' )
  107.                 ->setParameter('customer_id'$searchData['customer_id']);
  108.         }
  109.         // ステータス
  110.         if (!empty($searchData['status']) && count($searchData['status']) > 0) {
  111.             $qb
  112.                 ->andWhere($qb->expr()->in('r.Status'':Status'))
  113.                 ->setParameter('Status'$searchData['status']);
  114.         }
  115.         // crate_date
  116.         if (isset($searchData['create_date_start']) && !is_null($searchData['create_date_start'])) {
  117.             $date $searchData['create_date_start'];
  118.             $qb
  119.                 ->andWhere('r.create_date >= :create_date_start')
  120.                 ->setParameter('create_date_start'$date);
  121.         }
  122.         if (isset($searchData['create_date_end']) && !is_null($searchData['create_date_end'])) {
  123.             $date = clone $searchData['create_date_end'];
  124.             $date $date
  125.                 ->modify('+1 days');
  126.             $qb
  127.                 ->andWhere('r.create_date < :create_date_end')
  128.                 ->setParameter('create_date_end'$date);
  129.         }
  130.         // Order By
  131.         $qb->orderBy('r.create_date''DESC');
  132.         return $qb;
  133.     }
  134. }