У меня есть массив коллекции с именем $configurations
. Этот массив совпадает с моим Entity Configuration.php
подключенным к Product.php
как ManyToMany
. Теперь у меня есть другой объект с именем WorkType.php
который также подключается к Configuration.php
с помощью ManyToMany
.
Цель состоит в том, чтобы восстановить продукт с настройками O/Null
или Many
для текущего типа работы.
По умолчанию у меня есть продукт без конфигураций, но пользователь может выбрать флажками настройки O/Null
или One
или Many
доступные для типа работы.
Поэтому я создал этот queryBuilder в своем ProductRepository.php
:
public function getProductByManyConfig($slug, $configurations) { $queryBuilder = $this->getEntityManager()->createQueryBuilder(); $queryBuilder->select('p') ->from('MyBundle', 'p') ->join('p.workType', 'wt', 'WITH', 'wt.id = p.workType') ->leftJoin('p.configurations','c'); $queryBuilder->add('where', $queryBuilder->expr()->in('c', ':c')) ->andWhere('wt.slug = :slug') ->setParameters(array('slug'=> $slug, 'c'=> $configurations)); return $queryBuilder->getQuery() ->getResult(); }
Он работает, но проблема в том, что он возвращает мне все соответствия продукта с массивом конфигураций, которые я передаю в запрос.
Например, если массив имеет id
1 и 2 в Configuration.php
, запрос возвращает мне продукты, соответствующие параметрам configuration.id = 1 , configuration.id = 2 и configuration.id = 1 и 2 .
Итак, у меня есть 3 условия для достижения, мне нужно только одно; например, только продукт, содержащий всю конфигурацию.
Мне нужно вернуть только один продукт, содержащий ids
Configuration.php
переданные в массив для текущего WorkType.php
!
Это мой код контроллера:
$vars = array(); //containing all values I need for recover configurations properties $em = $this->getDoctrine()->getManager(); $var = array_values($vars); $configurations = $this->getDoctrine()->getRepository('MyBundle:Configuration')->findByName($var); foreach ($configurations as $conf) { $name = $conf->getName(); } $slug = "the_right_database_correspondence"; $arrayProbuctConfig = $this->getDoctrine()->getRepository('MyBundle:Product')->getProductByManyConfig($slug, $configurations); // return of the view
Поскольку выбор конфигураций может измениться, мне нужно создать этот динамический метод. Как я могу вернуть хороший результат?