sql >> データベース >  >> RDS >> Mysql

laravelはスペースで区切られた複数の単語を検索します

    これは、Query\Builderで行う方法です。 、ただし最初にいくつかの追加の注意事項:

    // user can provide double space by accident, or on purpose:
    $string = 'john  doe';
    
    // so with explode you get this:
    explode(' ', $string);
    array(
      0 => 'john',
      1 => '',
      2 => 'doe'
    )
    
    // Now if you go with LIKE '%'.value.'%', you get this:
    select * from table where name like '%john%' or name like '%%' or ...
    

    とはいえ、明らかにexplodeに頼ることはできません。 上記の場合、すべての行を取得するためです。

    だから、これはあなたがすべきことです:

    $string = 'john  doe';
    
    // split on 1+ whitespace & ignore empty (eg. trailing space)
    $searchValues = preg_split('/\s+/', $string, -1, PREG_SPLIT_NO_EMPTY); 
    
    $users = User::where(function ($q) use ($searchValues) {
      foreach ($searchValues as $value) {
        $q->orWhere('name', 'like', "%{$value}%");
      }
    })->get();
    

    whereに閉鎖があります or whereをラップすることをお勧めします 括弧内の句。たとえば、User 使用されたモデルSoftDeletingScope そして、あなたは私が提案したことをしないでしょう、あなたの質問全体が台無しになるでしょう。



    1. SQL ServerのFORMAT()でサポートされている標準の日付/時刻形式の文字列

    2. MySQL BOOL列とBOOLEAN列のデータ型の違いは何ですか?

    3. 前月のすべての行を取得するためのクエリ

    4. .frmファイルからmysqlデータベースを復元します