2017-06-02 88 views
0

我試圖在執行搜索查詢時連接「firstname」和「lastname」像這樣的「名字姓氏」 。CONCAT_WS在select語句上不起作用

這裏是我的代碼:

$query = Contact::find() 
    ->select([ 
     "CONCAT_WS(' ', firstname, lastname) AS name" 
    ]) 
    ->where('(firstname like :fname) OR (lastname like :lname) OR (email = :email)', [ 
     ':fname' => $searchkey, 
     ':lname' => $searchkey, 
     ':email' => $searchkey, 
    ])->all(); 

但結果是空這樣的:

Array 
(
    [0] => common\models\contact\Contact Object 
    (
     [_attributes:yii\db\BaseActiveRecord:private] => Array 
      (
      ) 

     [_oldAttributes:yii\db\BaseActiveRecord:private] => Array 
      (
      ) 

     [_related:yii\db\BaseActiveRecord:private] => Array 
      (
      ) 

     [_errors:yii\base\Model:private] => 
     [_validators:yii\base\Model:private] => 
     [_scenario:yii\base\Model:private] => default 
     [_events:yii\base\Component:private] => Array 
      (
      ) 

     [_behaviors:yii\base\Component:private] => Array 
      (
      ) 

    ) 

) 

我期待,我將有這樣的事情

[name] => "firstname lastname" 

輸出但沒有運氣。需要幫助謝謝。

回答

1

你應該在你Contcat模型添加一個公共變種$名稱和規則添加屬性爲安全對於recive與別名計算值

class Contact extends \yii\db\ActiveRecord 
{ 

    public $name; 
    .... 

} 
+0

我試過你說的話,但仍沒有運氣。我實際上有兩個模型'Contact'和'ContactQuery'。 「ContactQuery」是我把你的建議代碼放在哪裏,因爲那是我搜索功能的地方。 – david

+0

對不起,它實際上工作'[name] => testfirstname lastname'這是輸出, '[_attributes:yii \ db \ BaseActiveRecord:private] => Array()'我怎麼能把它放在_atttributes裏面呢,還是它不可能? – david

+0

我不理解您的最新評論..請更好地解釋您的需求 – scaisEdge