Php Yii2,其中条件为concat

Php Yii2,其中条件为concat,php,yii2,Php,Yii2,我的全名自动完成有问题。 我有一个usertable,其中包含firstname、lastname列。通过ajax 在搜索操作中,这是我的代码: $users = (new Query()) ->select('*') ->from($userTable) ->where(['like', 'username', $searchTerm]) ->

我的全名自动完成有问题。 我有一个usertable,其中包含firstname、lastname列。通过ajax

在搜索操作中,这是我的代码:

$users = (new Query())
                ->select('*')
                ->from($userTable)
                ->where(['like', 'username', $searchTerm])
                ->orWhere(['like', 'firstname', $searchTerm])
                ->orWhere(['like','lastname', $searchTerm])     
                ->andWhere(['<>','id', Yii::$app->user->id])
                ->andWhere(['status'=>self::STATUS_ACTIVE])
                ->orderBy('username')
                ->limit(20)
                ->all(); 
$users=(新查询())
->选择(“*”)
->从($userTable)
->其中(['like','username',$searchTerm])
->或where(['like','firstname',$searchTerm])
->或where(['like','lastname',$searchTerm])
->andWhere(['','id',Yii::$app->user->id])
->andWhere(['status'=>self::status\u ACTIVE])
->orderBy('用户名')
->限额(20)
->全部();
我的问题是,当我尝试搜索firstname时,lastname得到的是空记录

谢谢你的支持,我决定保留concat

$users = (new Query())
                    ->select('*')
                    ->from($userTable)
                    ->where(['like', 'username', $searchTerm])
                    ->orWhere(['like', "CONCAT(firstname, ' ', lastname)", $searchTerm])
                    ->andWhere(['<>','id', Yii::$app->user->id])
                    ->andWhere(['status'=>self::STATUS_ACTIVE])
                    ->orderBy('username')
                    ->limit(20)
                    ->all(); 
$users=(新查询())
->选择(“*”)
->从($userTable)
->其中(['like','username',$searchTerm])
->orWhere(['like',“CONCAT(firstname,,,lastname)”,$searchTerm])
->andWhere(['','id',Yii::$app->user->id])
->andWhere(['status'=>self::status\u ACTIVE])
->orderBy('用户名')
->限额(20)
->全部();

可能是,您可以用以下内容替代这两个或其中的firstname和lasta name

    ->orWhere(" concat('firstname', ' ' ,  'lastname')  like concat('%',:search_term) ")
    ->addParam(':search_term',$searchTerm )

下面的代码在使用SQL数据库时运行良好

$query->orWhere(['like', "CONCAT([staff].[first_name], ' ',[staff].[middle_name],' ', [staff].[last_name])", $this->name]);

可能会有帮助…这里可以进行SQL注入。@cronfy相关的$searchTerm通常由Yii2框架进行避免sqlinjection的alreday检查。。有几个原因。。问题是如何构建一个合适的concat过滤器。这不是正确的方法,因为它是不安全的。即使在您的上下文中它是安全的,如果将代码复制到另一个环境或另一个用例,也会导致sql注入。最好使用作者在问题更新中发布的自己的解决方案。@cronfy答案仅与问题相关。。OP使用这种变量并回答,如果只是为了建议正确使用concat的方法。。否则,每一个答案都会有上千个问题值得批评。。如果你想了解。。好。。否则。。我没办法。你。。正确的方法是贴出正确的答案。。(我看不出你的答案……这里)在Yii2中也不安全。但只有“CONCAT(staff.name),”staff.姓氏,“,”staff.patronymic“,没有brakets