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

时间:2017-07-17 12:07:26

标签: postgresql zend-framework

我是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%'

3 个答案:

答案 0 :(得分:0)

这不能回答你的问题,但是你考虑过这个问题吗?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您在Zend\Db\Sql\Predicate\Literal()中使用数组作为参数,则会将其解释为对$select->where ->literal('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE \'%word%\'') 。在此解决方案中,您无法使用函数和查询的组合部分。

您可以使用Zend\Db\Sql\Predicate\Expression(),例如:

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

或使用WHERE,例如:

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

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

在此解决方案中,您可以使用相同的方法构建sql Zend\Db\Sql\Where

Zend\Db\Sql\Predicate

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

您也可以构建为$where = new Where(); $where->equalsTo();// and more, more, more, with sub-where inclusive $select->where->predicate($where); / #include <iostream> template<class Derived> struct Base { void f() { static_cast<Derived *>(this)->f(); } void g() { static_cast<Derived *>(this)->g(); } }; struct Foo : public Base<Foo> { void f() { std::cout << 42 << std::endl; } }; int main() { Foo foo; foo.f(); // just OK foo.g(); // this will stack overflow and segfault } ,例如:

f