Yii2 where 条件与 concat

Nai*_*ham 5 php yii2

我在全名自动完成方面遇到问题。我有一个用户表,其中包含名字、姓氏列。通过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(); 
Run Code Online (Sandbox Code Playgroud)

我的问题是当我尝试用姓氏搜索名字时得到空记录。

感谢您的支持,我已经通过保持连接解决了

$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(); 
Run Code Online (Sandbox Code Playgroud)

sca*_*dge -2

您可以将名字和姓氏中的两个 orWhere 替换为

    ->orWhere(" concat('firstname', ' ' ,  'lastname')  like concat('%',:search_term) ")
    ->addParam(':search_term',$searchTerm )
Run Code Online (Sandbox Code Playgroud)

  • 这不是正确的方法,因为它不安全。即使在您的上下文中它是安全的,如果将您的代码复制到另一个环境或另一个用例,它也会导致 sql 注入。最好使用作者在问题更新中发布的自己的解决方案。 (2认同)