2017-07-17 13 views
0

私はZendとPostgresにつきました。私のUsersテーブルには、FirstNameカラムとLastNameカラムが含まれています。ZF2 - CONCAT関数を含むselectステートメントを正しく連結する方法

「フルネーム」の単一の文字列を使用してテーブルを照会したいと思います。例えば$search = 'John Sm'

私はCONCAT_WS関数を使用してテーブルから2つの名前を連結し、次にこれを検索文字列と比較しようとしています。

マイ声明

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

私はさまざまな組み合わせを試してみたが、連結権利を取得するように見えることはできません。私が欲しいの文の

例はSELECT * FROM Users WHERE 'firstname lastname' LIKE '%john s%'

答えて

0

これは、あなたの質問に答えていないですが、あなたは、このためのビューを作成すると考えられてきましたか?

0

あなた$select->where()それがペア['column1' => 'value', 'column2' => 'value']として解釈さにパラメータとして配列を使用している場合。このソリューションでは、関数とクエリの結合部分を使用することはできません。

あなたが 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) 

(変数が多い場合は、2番目のパラメータは、配列をハチができます)

をこの中で

ソリューションは、同じ方法を使用してSQL を使用してSQLを構築することができます

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); 
として Zend\Db\Sql\Where/ Zend\Db\Sql\Predicateとして構築することができます