Activerecord CONCAT_WS不处理select语句

Activerecord CONCAT_WS不处理select语句,activerecord,yii2,Activerecord,Yii2,我想把“firstname”和“lastname”连接起来,就像这个“firstname lastname” 在执行搜索查询时 这是我的密码: $query = Contact::find() ->select([ "CONCAT_WS(' ', firstname, lastname) AS name" ]) ->where('(firstname like :fname) OR (lastname like :lname) OR (emai

我想把“firstname”和“lastname”连接起来,就像这个“firstname lastname” 在执行搜索查询时

这是我的密码:

$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"

输出,但没有运气。需要帮助,谢谢。

您应该在Contcat模型中添加一个public var$name,并在规则中添加属性为safe,以便使用别名接收计算值

class Contact extends \yii\db\ActiveRecord
{

  public $name;
  .... 

}

我试过你说的话,但还是不走运。实际上,我有两种型号
Contact
ContactQuery
ContactQuery
是我放置建议代码的地方,因为这是我的搜索功能所在。很抱歉,它确实起作用了
[name]=>testfirstname lastname
这是输出,
[\uAttributes:yii\db\BaseActiveRecord:private]=>Array()
我怎样才能把它放在_attributes中?还是不可能?我不明白你最后的评论。。请更好地解释您的需求当前输出是这样的
[name]=>testfirstname lastname
[\u属性:yii\db\BaseActiveRecord:private]=>Array()
我想要的是这样的
[\u属性:yii\db\BaseActiveRecord:private]=>Array(
[name]=>testfirstname lastname)
如果可能的话。您使用的是一个concat_ws,结果不是一个数组而是一个字符串。。