2016-07-01 3 views
2

У меня проблема с полным именем автозаполнения. У меня есть один usertable, который содержит firstname, lastname columns.through ajax.Yii2 где состояние с concat

В поисковой действии это мой код:

$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(); 

Мой вопрос, когда я пытаюсь поиск ПгвЬЫате с 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(); 
+0

[This] (http://stackoverflow.com/questions/31297668/yii2-gridview-merge-two-columns/3 8130105 # 38130105) может быть полезно ... –

ответ

-2

Может быть, вы можете subsitute два orWhere для ПгвЬЫате и Lasta имя с

->orWhere(" concat('firstname', ' ' , 'lastname') like '%" . $searchTerm . "' ") 
+1

SQL-инъекция возможна здесь. – cronfy

+0

@cronfy связанный $ searchTerm, как правило, alreday check для избежания sqlinjection от фреймворка Yii2 .. по нескольким причинам .. и вопрос в том, как построить правильный фильтр concat. – scaisEdge

+1

Это неправильный способ сделать это , потому что это небезопасно. Даже если в вашем контексте это безопасно, кошка приводит к внедрению sql, если вы копируете свой код в другую среду или другой вариант использования. Лучше использовать собственное решение автора, опубликованное в обновлении вопроса. – cronfy

0

Следующий код работает отлично для меня используя базу данных SQL

$query->orWhere(['like', "CONCAT([staff].[first_name], ' ',[staff].[middle_name],' ', [staff].[last_name])", $this->name]); 
Смежные вопросы