带有 simple_array 的 DQL IN 子句
Doctrine DQL IN clause with simple_array
我需要检查 cpv.text(simple_array 类型 Doctrine2 (1,2,5,6))是否包含其中的 pr.id。还有其他方法吗?我的查询不起作用,因为我错误地使用了 IN 子句。
对不起我的英语不好。
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);
这是不可能的,因为教义存储数组和 simple_array 文本等数据。水合后转化为PHP数组。所有可能 types and docs。所以需要使用全文搜索,但是我的table引擎是InnoDB
我需要检查 cpv.text(simple_array 类型 Doctrine2 (1,2,5,6))是否包含其中的 pr.id。还有其他方法吗?我的查询不起作用,因为我错误地使用了 IN 子句。 对不起我的英语不好。
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);
这是不可能的,因为教义存储数组和 simple_array 文本等数据。水合后转化为PHP数组。所有可能 types and docs。所以需要使用全文搜索,但是我的table引擎是InnoDB