2016-07-01 6 views
2

私はフルネームオートコンプリートに問題があります。 私は1つのユーザーテーブルを持っています。このテーブルには、firstname、lastname、columns、through ajaxが含まれています。検索アクションでYii2 concatのある状態

これは私のコードです:私は姓が空のレコードを取得すると、検索FIRSTNAMEをしようとしていたときに

$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 = (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

連結を維持することによって解決してきたあなたのサポートのための

おかげで次のコードは、私のために正常に動作して

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

ここにSQLインジェクションが可能です。 – cronfy

+0

@cronfy関連する$ searchTermは、通常、Yii2フレームワークによるsqlinjectionを避けるためのアルデイチェックです。いくつかの理由で..そして質問は適切なコンカットフィルタを構築する方法です。 – scaisEdge

+1

これは正しい方法ではありませんそれは安全ではないからです。あなたの文脈で安全であっても、あなたのコードを別の環境または別のユースケースにコピーすると、catはSQLインジェクションにつながります。彼が質問の更新に投稿した著者自身のソリューションを使用する方がよいでしょう。 – cronfy

0

とFirstNameおよびlasta名用の2つのorWhereをsubsituteすることができますだろうSQLデータベースを使用して

$query->orWhere(['like', "CONCAT([staff].[first_name], ' ',[staff].[middle_name],' ', [staff].[last_name])", $this->name]); 
関連する問題