app/Plugin/CartUpRecommend/Repository/CartUpRecommendRepository.php line 22

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright(c) 2020 SYSTEM_KD
  4.  * Date: 2020/03/20
  5.  */
  6. namespace Plugin\CartUpRecommend\Repository;
  7. use Doctrine\Common\Persistence\ManagerRegistry;
  8. use Doctrine\ORM\QueryBuilder;
  9. use Eccube\Entity\Product;
  10. use Eccube\Repository\AbstractRepository;
  11. use Plugin\CartInRecommend\Entity\CartInRecommend;
  12. use Plugin\CartUpRecommend\Entity\CartUpRecommend;
  13. class CartUpRecommendRepository extends AbstractRepository
  14. {
  15.     public function __construct(ManagerRegistry $registry)
  16.     {
  17.         parent::__construct($registryCartUpRecommend::class);
  18.     }
  19.     /**
  20.      * @return QueryBuilder
  21.      */
  22.     public function getTargetFindQueryBuilder(Product $product)
  23.     {
  24.         /** @var QueryBuilder $qb */
  25.         $qb $this->createQueryBuilder('cur')
  26.             ->join('cur.ProductClass''pc')
  27.             ->join('pc.Product''p')
  28.             ->andWhere('cur.ParentProduct = :product')
  29.             ->setParameter('product'$product)
  30.             ->andWhere('pc.visible = true')
  31.             ->andWhere('p.Status = 1')
  32.             ->orderBy('cur.sortNo''DESC');
  33.         return $qb;
  34.     }
  35.     /**
  36.      * @param CartUpRecommend $cartUpRecommend
  37.      * @throws \Doctrine\ORM\ORMException
  38.      * @throws \Doctrine\ORM\OptimisticLockException
  39.      */
  40.     public function save($cartUpRecommend)
  41.     {
  42.         if (!$cartUpRecommend->getId()) {
  43.             $sortNoTop $this->findOneBy([], ['sortNo' => 'DESC']);
  44.             $sort_no 0;
  45.             if (!is_null($sortNoTop)) {
  46.                 $sort_no $sortNoTop->getSortNo();
  47.             }
  48.             $cartUpRecommend->setSortNo($sort_no 1);
  49.         }
  50.         $em $this->getEntityManager();
  51.         $em->persist($cartUpRecommend);
  52.         $em->flush($cartUpRecommend);
  53.     }
  54.     /**
  55.      * @param Product $editProduct
  56.      * @throws \Doctrine\ORM\ORMException
  57.      * @throws \Doctrine\ORM\OptimisticLockException
  58.      */
  59.     public function optimize(Product $editProduct)
  60.     {
  61.         if (!$editProduct) return;
  62.         /** @var QueryBuilder $qb */
  63.         $qb $this->createQueryBuilder('cr')
  64.             ->join('cr.ParentProduct''p')
  65.             ->join('cr.ProductClass''pc')
  66.             ->andWhere('p.id = :product')
  67.             ->setParameter('product'$editProduct)
  68.             ->andWhere('pc.visible = false');
  69.         $cartUpRecommends $qb->getQuery()->getResult();
  70.         /** @var CartInRecommend $cartUpRecommend */
  71.         foreach ($cartUpRecommends as $cartUpRecommend) {
  72.             // 削除してソート順調整
  73.             $sortNo $cartUpRecommend->getSortNo();
  74.             $this->getEntityManager()->remove($cartUpRecommend);
  75.             $this->createQueryBuilder('cr')
  76.                 ->update()
  77.                 ->set('cr.sortNo''cr.sortNo -1')
  78.                 ->where('cr.sortNo > :sortNo')
  79.                 ->andWhere('cr.ParentProduct = :product')
  80.                 ->setParameter('sortNo'$sortNo)
  81.                 ->setParameter('product'$editProduct)
  82.                 ->getQuery()
  83.                 ->execute();
  84.             $this->getEntityManager()->flush($cartUpRecommend);
  85.         }
  86.     }
  87. }