2017-06-02 11 views
0

検索クエリの実行中に、この "firstname lastname"のような "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モデルにプロパティpublic var $名を追加し、エイリアス名で計算値をreciveするための規則に安全として属性を追加する必要があり

class Contact extends \yii\db\ActiveRecord 
{ 

    public $name; 
    .... 

} 
+0

私はあなたが言ったが、まだ何試してみました運がない。私は実際に 'Contact'と' ContactQuery'という2つのモデルを持っています。 'ContactQuery'は私の提案したコードを置いた場所です。なぜなら、私の検索機能がそこにあるからです。 – david

+0

実際には '[name] => testfirstname lastname'という文字列が出力されています。[_attributes:yii \ db \ BaseActiveRecord:private] => Array()' _attribributes内にどのように置くことができますか?不可能? – david

+0

あなたの最後のコメントを理解できません。あなたの必要性をよりよく説明してください。 – scaisEdge

関連する問題