ZF2 - 如何正确连接包含 CONCAT 函数的选择语句



我是Zend和Postgres的新手。我的Users表包含一个FirstName列和一个LastName列。

我想使用单个"全名"字符串查询表;例如$search = 'John Sm'.

我正在尝试使用CONCAT_WS函数连接表中的两个名称,然后将其与搜索字符串进行比较。

我的声明

$select->where(array('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE ?' => array("%$search%")));

我尝试了不同的组合,但似乎无法正确连接。

我想要的语句的一个例子是SELECT * FROM Users WHERE 'firstname lastname' LIKE '%john s%'

这并不能回答您的问题,但是您是否考虑过对此进行查看?

您是否检查了最新版本的文档?

https://framework.zend.com/manual/1.12/en/zend.db.statement.html

如果在$select->where()中使用数组作为参数,则会将其解释为['column1' => 'value', 'column2' => 'value']对。在此解决方案中,不能使用查询的函数和组合部分。

您可以使用ZendDbSqlPredicateLiteral(),例如:

$select->where
->literal('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE '%word%'')

或使用ZendDbSqlPredicateExpression(),例如:

$select->where
->expression('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE '%?%'', $word)

(如果变量更多,第二个参数可以蜂数组(

在此解决方案中,您可以使用相同的方法构建 sqlWHERE

$select->where
->equalsTo()
->or
->greatherThan()
->and
->like()
->nest()
->lessThan()
->or
->literal()
->unnest()
...

https://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html#id7

您也可以构建ZendDbSqlWhere/ZendDbSqlPredicate例如:

$where = new Where();
$where->equalsTo();// and more, more, more, with sub-where inclusive
$select->where->predicate($where);

最新更新