我是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);