2015-04-10 2 views
0

Мне нужно проверить cpv.text (simple_array type Doctrine2 (1,2,5,6)) для содержащегося в нем pr.id. Есть ли другой способ сделать это? Мой запрос не работает, потому что я неправильно использую предложение IN. Извините за мой английский.Doctrine DQL IN clause with simple_array

return $this->getEntityManager() 
->createQuery(("SELECT c, cpv, pr, p " 
. "FROM AmoMainBundle:Company c " 
. "JOIN c.status s " 
. "JOIN cpv.param p " 
. "JOIN c.country co " 
. "JOIN p.props pr " 
. "WHERE EXISTS (SELECT p2 FROM AmoMainBundle:Param p2 " 
. "LEFT JOIN p2.props pr2 " 
. "LEFT JOIN p2.companyParameterValues cpv2 " 
. "WHERE (p2.type >=2 AND pr2.text LIKE ?1 " 
. "AND pr2.id IN (cpv2.text) AND p2.name LIKE ?2) " 
. "OR (p2.type < 2 AND p2.name LIKE ?2)) " 
. "AND (s IS NULL OR s.dateto < CURRENT_TIMESTAMP()) " 
. "ORDER BY c.lastupd DESC, " 
. "c.name ASC, p.mainPriority DESC") 
        ->setParameter(1,$text)->setParameter(2, $name); 

ответ

2

Это невозможно, cuz doctrine store array и simple_array данные, такие как текст. Он преобразуется в массив PHP после гидратации. Все возможные types and docs. Поэтому нужно использовать полнотекстовый поиск, но мой движок таблицы - InnoDB.