2017-06-06 3 views
0

In meiner yii2 Anwendung brauche ich so etwas wie diese:yii2. Abfrage mit ähnlichem Zustand

SELECT * FROM customers WHERE first_name||' '||last_name ILIKE '%Nick%' ORDER BY "id"; 

Diese Abfrage wird Kunden mit verkettet first_name und last_name wie ‚Nick‘.

In meiner yii1 Anwendung kann ich CDBCriteria nächste Art und Weise verwenden:

$criteria = new CDbCriteria; 
     $criteria->addSearchCondition(
      "first_name||' '||last_name", 
      'Nick', 
      true, 
      'and', 
      'ILIKE' 
     ); 

$criteria->order = 't.id asc'; 

Und das funktioniert gut.

In yii2 Ich habe versucht:

$a = \common\models\Customer::find() 
     ->filterWhere(['ILIKE', "first_name||' '||last_name", 'Nick']) 
     ->orderBy(['id' => SORT_ASC]) 
     ->all(); 

Und bekam Spalte Ausnahme nicht vorhanden ist, und SQL war:

SELECT * FROM "customers" WHERE "first_name||' '||last_name" ILIKE '%Nick%' ORDER BY "id" 

\ yii \ db \ Expression Mit tut Situation ändern.

+0

, welche Datenbank die Sie verwenden? – scaisEdge

+0

ist es PostgreSQL – Nickolay

Antwort

0

Dies ist eine von vielen Möglichkeiten, es zu tun:

$customers = \common\models\Customer::find() 
     ->select('*') 
     ->where(['like','concat(first_name,\' \', last_name)','Nick N']) 
     ->orderBy(['id' => SORT_ASC]) 
     ->all(); 
+0

wenn Kunde first_name ist "Nick" und last_name ist "Nick", und Query Zeile ist "Nick N" es funktioniert nicht – Nickolay

+0

Ich habe nicht verstanden, was Sie vorher gefragt haben. Das Beispiel funktioniert nun entsprechend Ihrem Fall, ich habe das Beispiel bearbeitet. – dataskills

0

es für eine Weile sein lassen:

\common\models\Customer::find() 
       ->where("first_name||' '||last_name ilike '%'||:query||'%'", [':query' => $name]) 
       ->orderBy(['id' => SORT_ASC]) 
       ->all()