src/CoreBundle/Model/Vehicles/Repository.php line 292

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\Model\Vehicles;
  3. use CoreBundle\Entity\Vehicles\Variation;
  4. use CoreBundle\Entity\Vehicles\VariationCharacteristic;
  5. use CoreBundle\Entity\Vehicles\VehicleItem;
  6. use DateTime;
  7. use CoreBundle\Repository\Vehicles\VehicleRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Doctrine\ORM\EntityRepository;
  10. use CoreBundle\Repository\Vehicles\VehicleItemRepository;
  11. use CoreBundle\Repository\Vehicles\VariationRepository;
  12. use Application\Sonata\MediaBundle\Entity\Media;
  13. use CoreBundle\Entity\Brand;
  14. use CoreBundle\Entity\Dealer;
  15. use CoreBundle\Entity\Model;
  16. use CoreBundle\Entity\Vehicles\Category;
  17. use CoreBundle\Entity\Vehicles\CharacteristicValue;
  18. use CoreBundle\Entity\Vehicles\Group;
  19. use CoreBundle\Entity\Vehicles\Vehicle;
  20. use Doctrine\ORM\OptimisticLockException;
  21. use Doctrine\ORM\Query\Expr\Join;
  22. class Repository
  23. {
  24.     /**
  25.      * @var EntityManagerInterface
  26.      */
  27.     private $em;
  28.     /**
  29.      * Vehicle constructor.
  30.      * @param EntityManagerInterface $em
  31.      */
  32.     public function __construct(EntityManagerInterface $em)
  33.     {
  34.         $this->em $em;
  35.     }
  36.     /**
  37.      * @return VehicleRepository|EntityRepository
  38.      */
  39.     private function getVehicleRepository()
  40.     {
  41.         return $this->em->getRepository(Vehicle::class);
  42.     }
  43.     /**
  44.      * @return VehicleItemRepository|EntityRepository
  45.      */
  46.     private function getVehicleItemRepository()
  47.     {
  48.         return $this->em->getRepository(VehicleItem::class);
  49.     }
  50.     /**
  51.      * @return VariationRepository|EntityRepository
  52.      */
  53.     private function getVariationRepository()
  54.     {
  55.         return $this->em->getRepository(Variation::class);
  56.     }
  57.     /**
  58.      * @return VariationCharacteristic|EntityRepository
  59.      */
  60.     private function getVariationCharacteristicRepository()
  61.     {
  62.         return $this->em->getRepository(VariationCharacteristic::class);
  63.     }
  64.     /**
  65.      * @return EntityRepository
  66.      */
  67.     private function getCharacteristicRepository()
  68.     {
  69.         return $this->em->getRepository(Characteristic::class);
  70.     }
  71.     /**
  72.      * @param $id
  73.      * @return Vehicle|null
  74.      */
  75.     public function findById($id)
  76.     {
  77.         return $this->getVehicleRepository()->find($id);
  78.     }
  79.     /**
  80.      * @param $url
  81.      * @param Dealer $Dealer
  82.      * @return null|Vehicle
  83.      */
  84.     public function findByUrl($urlDealer $Dealer)
  85.     {
  86.         return $this->getVehicleRepository()->findOneBy(['dealer' => $Dealer'url' => $url]);
  87.     }
  88.     public function findByUrlWithoutDealer($url)
  89.     {
  90.         return $this->getVehicleRepository()->findOneBy(['url' => $url]);
  91.     }
  92.     public function findByGroup($groupIdDealer $Dealer)
  93.     {
  94.         $params = [
  95.             'state' => 1,
  96.             'is_used' => 0,
  97.             'group' => $groupId,
  98.             'dealer' => $Dealer,
  99.             'is_delete' => [0null]
  100.         ];
  101.         return $this->getVehicleRepository()->findBy($params);
  102.     }
  103.     public function getCarsToTestDrive(Dealer $dealer null$is_used 0)
  104.     {
  105.         $queryBuilder $this->getVehicleRepository()->createQueryBuilder('v')
  106.             ->join('v.model''m')
  107.             ->join('m.testdrive''t')
  108.             ->where('v.state = 1')
  109.             ->andWhere('t.state = 1')
  110.             ->andWhere('v.is_used = :is_used')
  111.             ->andWhere('v.is_delete is null OR v.is_delete = 0')
  112.             ->groupBy('v.id')
  113.             ->setParameter('is_used'$is_used);
  114.         if ($dealer) {
  115.             $queryBuilder->andWhere('v.dealer = :dealer')
  116.                 ->setParameter('dealer'$dealer);
  117.         }
  118.         return $queryBuilder->getQuery()->getResult();
  119.     }
  120.     public function getOurCarsToTestDrive(Dealer $dealer null$is_used 0)
  121.     {
  122.         $params = [
  123.             'state' => 1,
  124.             'is_used' => $is_used,
  125.             'test_drive' => 1,
  126.             'is_delete' => [0null]
  127.         ];
  128.         if ($dealer) {
  129.             $params['dealer'] = $dealer;
  130.         }
  131.         return $this->getVehicleRepository()->findBy($params);
  132.     }
  133.     /**
  134.      * @param $id
  135.      * @return Vehicle|null
  136.      */
  137.     public function findUsedById($id)
  138.     {
  139.         return $this->getVehicleRepository()->findOneBy(['id' => $id'is_used' => 1'is_delete' => [0null]]);
  140.     }
  141.     /**
  142.      * @param $url
  143.      * @return Vehicle|null
  144.      */
  145.     public function findUsedByUrl($url)
  146.     {
  147.         return $this->getVehicleRepository()->findOneBy(['url' => $url'is_used' => 1]);
  148.     }
  149.     public function getSimilarVehicles(AbstractVehicle $vehicle$used false$byDealer false$byBrand false)
  150.     {
  151.         //todo remove
  152.         return [];
  153.         //todo remove magic numbers
  154.         $similarPricePercent 20;
  155.         $maxPrice $vehicle->price() * (($similarPricePercent 100) / 100);
  156.         $minPrice $vehicle->price() * ((100 $similarPricePercent) / 100);
  157.         $query $this->getVehicleItemRepository()->createQueryBuilder('v')
  158.             ->join('v.variation''var')
  159.             ->join('var.vehicle''vehicle')
  160.             ->join('vehicle.model''m')
  161.             ->where('vehicle.state = 1')
  162.             ->andWhere('vehicle.is_used = :used')
  163.             ->andWhere('vehicle.vehicle_type = :type')
  164.             ->andWhere('(v.price <= :max and v.price >= :min and (v.alt_price = 0 OR v.alt_price is null)) OR (v.alt_price <= :max and v.alt_price >= :min)')
  165.             ->andWhere('vehicle.id != :id')
  166.             ->setParameter('used', (int)$used)
  167.             ->setParameter('id'$vehicle->getVehicleId())
  168.             ->setParameter('max'$maxPrice)
  169.             ->setParameter('min'$minPrice)
  170.             ->setParameter('type'$vehicle->getVehicleType());
  171.         if ($vehicle->getBodyType()) {
  172.             $query->join('var.characteristics''vc'Join::WITH'vc.characteristic = :characteristic AND vc.characteristic_value = :chValue')
  173.                 ->setParameter('characteristic'$vehicle->getBodyType()->getCharacteristic())
  174.                 ->setParameter('chValue'$vehicle->getBodyType()->getId());
  175.         }
  176.         if ($byDealer) {
  177.             $query->andWhere('vehicle.dealer = :dealer')
  178.                 ->setParameter('dealer'$vehicle->getDealer());
  179.         }
  180.         if ($byBrand) {
  181.             $query->andWhere('m.brand = :brand')
  182.                 ->setParameter('brand'$vehicle->getModel()->getBrand());
  183.         }
  184.         return $query->getQuery()->getResult();
  185.     }
  186.     public function getUsedByDealer(Dealer $dealer)
  187.     {
  188.         //todo remove magic numbers
  189.         return $this->getVehicleRepository()->findBy(['dealer' => $dealer'state' => 1'is_used' => 1]);
  190.     }
  191.     public function getUsedVehicle(Dealer $dealerBrand $brand$url$vehicleType false)
  192.     {
  193.         return $this->getVehicleRepository()->getUsedVehicle($dealer$brand$url);
  194.     }
  195.     public function getUsed(Dealer $dealer$byBrand false$vehicleType falseDateTime $date null)
  196.     {
  197.         $brand = [];
  198.         if (is_array($byBrand)) {
  199.             $brand $byBrand;
  200.         } elseif ($byBrand) {
  201.             $brand[] = $dealer->getBrand()->getId();
  202.         }
  203.         return $this->getVehicleRepository()->getUsedVehicles($dealer$brand$vehicleType$date);
  204.     }
  205.     public function getUsedVehicleByDealerModel(Dealer $dealerModel $model$limit)
  206.     {
  207.         return $this->getVehicleRepository()->getUsedVehicleByDealerModel($dealer$model$limit);
  208.     }
  209.     public function getDisabled(Dealer $dealer)
  210.     {
  211.         //todo remove magic numbers
  212.         return $this->getVehicleRepository()->findBy(['dealer' => $dealer'show_disabled' => 1'state' => 0'is_used' => 0]);
  213.     }
  214.     public function getAllDisabled()
  215.     {
  216.         return $this->getVehicleRepository()->findBy(['show_disabled' => 1'state' => 0'is_used' => 0]);
  217.     }
  218.     public function getNewByDealer(Dealer $dealer null$vehicleTypes = [], bool $sortByPosition null)
  219.     {
  220.         return $this->getVehicleRepository()->getNewByDealer($dealer$vehicleTypes$sortByPosition ?? null);
  221.     }
  222.     public function getByRecommendGroup(Dealer $dealer null$recomendGroupId)
  223.     {
  224.         $params = [
  225.             'state' => 1,
  226.             'is_used' => 0,
  227.             'is_delete' => [0null],
  228.             'recommend_group' => $recomendGroupId,
  229.         ];
  230.         if ($dealer) {
  231.             $params['dealer'] = $dealer;
  232.         }
  233.         return $this->getVehicleRepository()->findBy($params, ['position' => 'ASC']);
  234.     }
  235.     public function getVehicleByType(Dealer $dealer null$type$isUsed 0)
  236.     {
  237.         $params = [
  238.             'state' => 1,
  239.             'is_used' => $isUsed,
  240.             //todo remove magic numbers
  241.             'is_delete' => [0null],
  242.             'vehicle_type' => $type,
  243.         ];
  244.         if ($dealer) {
  245.             $params['dealer'] = $dealer;
  246.         }
  247.         return $this->getVehicleRepository()->findBy($params, ['position' => 'ASC']);
  248.     }
  249.     public function getHybridVehiclesByDealer(Dealer $dealer)
  250.     {
  251.         $fuelTypeChar $this->em->getRepository(Characteristic::class)->findOneBy(['model_unique' => Characteristic::FUEL_TYPE_UNIQUE_ID'vehicle_type' => VehicleType::PASSENGER_TYPE]);
  252.         //todo remove magic numbers
  253.         return $this->getVehicleRepository()->getVehiclesByCharacteristic($dealer$fuelTypeChar16);
  254.     }
  255.     public function getHybridVehiclesQueryBuilder(Dealer $dealer)
  256.     {
  257.         $fuelTypeChar $this->em->getRepository(Characteristic::class)->findOneBy(['model_unique' => Characteristic::FUEL_TYPE_UNIQUE_ID'vehicle_type' => VehicleType::PASSENGER_TYPE]);
  258.         //todo remove magic numbers
  259.         return $this->getVehicleRepository()->getVehiclesQueryByCharacteristic($dealer$fuelTypeChar16);
  260.     }
  261.     public function getActionVehicleItems(Dealer $dealer null)
  262.     {
  263.         return $this->getVehicleItemRepository()->getActions($dealer);
  264.     }
  265.     public function getByCategory(Category $categoryDealer $dealer)
  266.     {
  267.         return $this->getVehicleRepository()->findBy(['category' => $category'dealer' => $dealer'state' => 1'is_used' => 0]);
  268.     }
  269.     public function getByCategoryWithPagination(Dealer $dealer$category$page$limit 4)
  270.     {
  271.         $query $this->getVehicleRepository()->createQueryBuilder('ve')
  272.             ->where('ve.is_used = 0')
  273.             ->andWhere('ve.state = 1')
  274.             ->andWhere('ve.dealer = :dealer')->setParameter('dealer'$dealer)
  275.             ->orderBy('ve.date_create''ASC');
  276.         if ($category) {
  277.             $query->andWhere('ve.category = :category')->setParameter('category'$category);
  278.         }
  279.         if($page 0){
  280.             $offset = ($page 1) * $limit;
  281.             $query->setFirstResult($offset)
  282.             ->setMaxResults($limit);
  283.         }
  284.         return $query->getQuery()->getResult();
  285.     }
  286.     public function getByCategoryGroup(Category $categoryGroup $groupDealer $dealer)
  287.     {
  288.         return $this->getVehicleRepository()->findBy(['category' => $category'group' => $group'dealer' => $dealer'state' => 1'is_used' => 0]);
  289.     }
  290.     public function getRentalByDealer(Dealer $dealer)
  291.     {
  292.         return $this->getVehicleItemRepository()->getRentVehicles($dealer);
  293.     }
  294.     public function getUsedVehicles($vehicleType null)
  295.     {
  296.         $params = [
  297.             'is_used' => 1,
  298.             'state' => 1,
  299.         ];
  300.         if ($vehicleType) {
  301.             $params['vehicle_type'] = $vehicleType;
  302.         }
  303.         return $this->getVehicleRepository()->findBy($params);
  304.     }
  305.     /**
  306.      * @param $type
  307.      * @param Dealer|null $dealer
  308.      * @return array|Vehicle[]
  309.      */
  310.     public function getVehiclesByType($typeDealer $dealer null)
  311.     {
  312.         $params = [
  313.             'vehicle_type' => $type,
  314.             'is_used' => '0',
  315.         ];
  316.         if ($dealer) {
  317.             $params['dealer'] = $dealer;
  318.         }
  319.         return $this->getVehicleRepository()->findBy($params);
  320.     }
  321.     public function getAvailUsedBodyTypes($vehicleType$locale)
  322.     {
  323.         $characteristics $this->getVariationCharacteristicRepository()->createQueryBuilder('vc')
  324.             ->join('vc.variation''variation')
  325.             ->join('vc.characteristic''c'Join::WITH'c.model_unique = :CUID')
  326.             ->join('variation.vehicle''vehicle')
  327.             ->where('vehicle.is_used = 1')
  328.             ->where('vehicle.vehicle_type = :vehicle_type')
  329.             ->setParameter('CUID'Characteristic::BODY_TYPE_UNIQUE_ID)
  330.             ->setParameter('vehicle_type'$vehicleType)
  331.             ->getQuery()
  332.             ->getResult();
  333.         $result = [];
  334.         foreach ($characteristics as $c) {
  335.             $cv $c->getCharacteristicValue();
  336.             if (!$cv) {
  337.                 continue;
  338.             }
  339.             $result[$cv->getId()] = $cv->getValue($locale);
  340.         }
  341.         return $result;
  342.     }
  343.     /**
  344.      * @param $interestType
  345.      * @param int $is_used
  346.      * @return array
  347.      */
  348.     public function getMainInterest($interestType$is_used 0)
  349.     {
  350.         $sort '';
  351.         $order '';
  352.         switch ($interestType) {
  353.             case 1:
  354.                 $sort 'vi.price';
  355.                 $order 'ASC';
  356.                 break;
  357.             case 2:
  358.                 $sort 'vi.price';
  359.                 $order 'ASC';
  360.                 break;
  361.             case 3:
  362.                 $sort 'v.id';
  363.                 $order 'DESC';
  364.                 break;
  365.         }
  366.         $crafted = [];
  367.         $query $this->getVehicleRepository()->createQueryBuilder('v')
  368.             ->innerJoin('v.vehicle_items''vi')
  369.             ->andWhere('v.is_used = 1')
  370.             ->andWhere('v.state = 1')
  371.             ->andWhere('vi.sold = 0')
  372.             ->andWhere('vi.deposit = 0')
  373.             ->orderBy($sort$order)
  374.             ->setMaxResults(4);
  375.         if ($interestType == 1) {
  376.             $query->andWhere('v.recommend = 1');
  377.         }
  378.         return $query->getQuery()->getResult();
  379.     }
  380.     public function getNewAddVehicleItem($isUsed false$limit 5Dealer $dealer null)
  381.     {
  382.         $query $this->getVehicleItemRepository()->createQueryBuilder('vi')
  383.             ->innerJoin('vi.vehicle''ve')
  384.             ->where('vi.deposit = :deposit')->setParameter('deposit'false)
  385.             ->andWhere('ve.is_used = :isUsed')->setParameter('isUsed',$isUsed)
  386.             ->andWhere('ve.state = :vehicleState')->setParameter('vehicleState',true)
  387.             ->andWhere('ve.is_not_filled = :isNotFilled')->setParameter('isNotFilled',false)
  388.             ->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete',false)
  389.             ->andWhere('vi.sold != 1')
  390.             ->orderBy('ve.id''DESC')
  391.             ->setMaxResults($limit);
  392.         if ($dealer) {
  393.             $query->andWhere('ve.dealer = :dealer')->setParameter('dealer'$dealer);
  394.         }
  395.         return $query->getQuery()->getResult();
  396.     }
  397.     public function getProposeVehicleItem($isUsed false$brand null$model null$bodyType null$withDiscount false)
  398.     {
  399.         $query $this->getVehicleItemRepository()->createQueryBuilder('vi')
  400.             ->innerJoin('vi.vehicle''ve')
  401.             ->innerJoin('ve.model''model')
  402.             ->where('vi.deposit = :deposit')->setParameter('deposit'false)
  403.             ->andWhere('ve.is_used = :isUsed')->setParameter('isUsed',$isUsed)
  404.             ->andWhere('ve.state = :vehicleState')->setParameter('vehicleState',true)
  405.             ->andWhere('ve.is_not_filled = :isNotFilled')->setParameter('isNotFilled',false)
  406.             ->andWhere('ve.is_delete = :isDelete')->setParameter('isDelete',false)
  407.             ->andWhere('vi.sold != 1')
  408.             ->orderBy('(vi.alt_price / vi.price) * 100''ASC');
  409.         if($brand && $model){
  410.             $query->andWhere('model.brand = :brand')->setParameter('brand'$brand)
  411.                   ->andWhere('model = :model')->setParameter('model'$model);
  412.         }
  413.         if($brand && !$model){
  414.             $query->andWhere('model.brand = :brand')->setParameter('brand'$brand);
  415.         }
  416.         if($withDiscount){
  417.             $query->andWhere('vi.alt_price > 0');
  418.         }
  419.         if($bodyType){
  420.             $query->join('vi.variation''var')
  421.                   ->join('var.characteristics''vc'Join::WITH,
  422.                       'vc.characteristic = :characteristic AND vc.characteristic_value = :chValue')
  423.                   ->setParameter('characteristic'$bodyType->getCharacteristic())
  424.                   ->setParameter('chValue'$bodyType->getId());
  425.         }
  426.         return $query->getQuery()->getResult();
  427.     }
  428.     public function getMinUsedYear($vehicleType)
  429.     {
  430.         return $this->getVehicleItemRepository()->createQueryBuilder('vi')
  431.             ->innerJoin('vi.vehicle''v'Join::WITH'v.is_used = 1')
  432.             ->where('v.state = 1')
  433.             ->andWhere('v.vehicle_type = :vehicle_type')
  434.             ->setParameter('vehicle_type'$vehicleType)
  435.             ->select('MIN(vi.year)')
  436.             ->getQuery()
  437.             ->getSingleScalarResult();
  438.     }
  439.     /**
  440.      * @param $vehicleType
  441.      * @return Brand[]
  442.      */
  443.     public function getUsedVehicleBrands($vehicleType)
  444.     {
  445.         return $this->em->getRepository(Brand::class)->getUsedVehicleBrands($vehicleType);
  446.     }
  447.     public function getSortedByPositionVehicle($vehicles)
  448.     {
  449.         usort($vehicles, fn($a$b) => $a->getPosition() <=> $b->getPosition());
  450.         return $vehicles;
  451.     }
  452.     public function getCatalogFilters($vehicleType$locale)
  453.     {
  454.         $characteristics $this->getCharacteristicRepository()->findBy(['characteristic_type' => Characteristic::REFERENCE_TYPE'vehicle_type' => $vehicleType'in_filter' => 1]);
  455.         $dynamicCharacteristic = [];
  456.         /** @var \CoreBundle\Entity\Vehicles\Characteristic $characteristic */
  457.         foreach ($characteristics as $characteristic) {
  458.             $chracteristicItem = [
  459.                 'id' => $characteristic->getId(),
  460.                 'title' => $characteristic->getTitle($locale),
  461.                 'values' => []
  462.             ];
  463.             /** @var CharacteristicValue $cValue */
  464.             foreach ($characteristic->getCharacteristicValue() as $cValue) {
  465.                 $chracteristicItem['values'][] = [
  466.                     'title' => $cValue->getValue($locale),
  467.                     'value' => $cValue->getId(),
  468.                 ];
  469.             }
  470.             $dynamicCharacteristic[] = $chracteristicItem;
  471.         }
  472.         $brands $this->getUsedVehicleBrands(VehicleType::PASSENGER_TYPE);
  473.         $brResult = [];
  474.         foreach ($brands as $brand) {
  475.             $brResult[] = [
  476.                 'title' => $brand->getName(),
  477.                 'value' => $brand->getId(),
  478.             ];
  479.         }
  480.         return [
  481.             'brand' => $brResult,
  482.             'dynamic' => $dynamicCharacteristic,
  483.         ];
  484.     }
  485.     /**
  486.      * @param $params
  487.      * @param $step
  488.      * @param $limit
  489.      * @param bool $withNotFilled
  490.      * @return array
  491.      */
  492.     public function findUsedByParams($params$step$limit$withNotFilled false)
  493.     {
  494.         $params['state'] = ['used'];
  495.         $params['filled'] = $withNotFilled;
  496.         $vehicleItems $this->getVehicleItemRepository()->findByParams($params$step$limit);
  497.         return [
  498.             'vehicleItems' => $vehicleItems,
  499.             'count' => count($vehicleItems)
  500.         ];
  501.     }
  502.     /**
  503.      * @param $params
  504.      * @param $step
  505.      * @param $limit
  506.      * @return array
  507.      * @throws OptimisticLockException
  508.      */
  509.     public function findByParams($params$step$limit)
  510.     {
  511.         $totalCount $this->getVehicleItemRepository()->getCountByParams($params);
  512.         $vehicleItems $this->getVehicleItemRepository()->findByParams($params$step$limit);
  513.         return [
  514.             'vehicleItems' => $vehicleItems,
  515.             'count' => $totalCount
  516.         ];
  517.     }
  518.     public function getAvailBrandsInstance($localebool $filterPalmira false)
  519.     {
  520.         $brands $this->em->getRepository(Brand::class)->getAvailBrandsInstance(truefalse$filterPalmira);
  521.         $result = [];
  522.         /**
  523.          * @var int $key
  524.          * @var Brand $brand
  525.          */
  526.         foreach ($brands as $key => $brand) {
  527.             $result[$key] = [
  528.                 'id' => $brand->getId(),
  529.                 'name' => $brand->getName(),
  530.                 'image' => $brand->getLogo(),
  531.             ];
  532.             if (count($brand->getDealer()) == 1) {
  533.                 $result[$key]['dealerId'] = $brand->getDealer()->first()->getId();
  534.                 $result[$key]['dealerUrl'] = $brand->getDealer()->first()->getUrl();
  535.                 $result[$key]['dealerTitle'] = $brand->getDealer()->first()->getName();
  536.                 $result[$key]['dealerAddress'] = $brand->getDealer()->first()->getAddressByLocale($locale);
  537.             } else {
  538.                 /** @var Dealer $dealer */
  539.                 foreach ($brand->getDealer() as $dealer) {
  540.                     $result[$key]['dealers'][] = [
  541.                         'id' => $dealer->getId(),
  542.                         'title' => $dealer->getNameByLocale($locale),
  543.                         'adres' => $dealer->getAddressByLocale($locale),
  544.                         'url' => $dealer->getUrl()
  545.                     ];
  546.                 }
  547.             }
  548.         }
  549.         return $result;
  550.     }
  551.     /**
  552.      * @param bool $withoutImage
  553.      * @param null $state
  554.      * @param null $vehicleType
  555.      * @param null $hasNDS
  556.      * @return mixed
  557.      */
  558.     public function getAvailBrands($withoutImage false$state null$vehicleType null$hasNDS null)
  559.     {
  560.         $brands $this->em->getRepository(Brand::class)->getAvailBrands($withoutImage$state$vehicleType$hasNDS);
  561.         $result = [];
  562.         foreach ($brands as $key => $brand) {
  563.             /** @var Brand $brandObject */
  564.             $brandObject $brand[0];
  565.             $logo $brandObject->getLogo();
  566.             $result[$key] = [
  567.                 'id' => $brandObject->getId(),
  568.                 'count' => $brand['cnt'],
  569.                 'name' => $brandObject->getName(),
  570.                 'url' => $brandObject->getUrl(),
  571.                 'image' => $brand['image'],
  572.                 'logo' => $logo $logo->getId() : null,
  573.                 'logoObj' => $logo
  574.             ];
  575.         }
  576.         return $result;
  577.     }
  578.     public function getSchoolVehicles(Dealer $dealer)
  579.     {
  580.         return $this->em->getRepository(Vehicle::class)->findBy(['school_available' => 1'dealer' => $dealer]);
  581.     }
  582.     public function searchCar($string)
  583.     {
  584.         return $this->getVehicleRepository()->searchCar($string);
  585.     }
  586.     public function getUsedByBrand(Brand $brand)
  587.     {
  588.         return $this->getVehicleRepository()->createQueryBuilder('v')
  589.             ->join('v.model''m')
  590.             ->where('v.is_used = 1')
  591.             ->andWhere('v.state = 1')
  592.             ->andWhere('m.brand = :brand')
  593.             ->setParameter('brand'$brand)
  594.             ->getQuery()->getResult();
  595.     }
  596. }