2017-03-17 10 views
5

LIKE演算子でクエリビルダを使用したいのですが、正しく動作しません。ここでLaravelどこがうまくいきませんか

は私のコントローラで私のコードです:ここでは

public function listall($query) { 
     $Clubs = Club::where('clubs.name', 'like', "%$query%") 
       ->Join('leagues', 'clubs.league_id', '=', 'leagues.id') 
       ->select('clubs.id', 'clubs.name', 'clubs.blason', 'leagues.name as league_name') 
       ->orderBy('clubs.name') 
       ->get(); 

     return Response::json($Clubs); 
    } 

は、私のJavascriptコードです:

<script type="text/javascript"> 
    function hasard(min,max){ 
     return min+Math.floor(Math.random()*(max-min+1)); 
    } 
    jQuery(document).ready(function($) { 
     // Set the Options for "Bloodhound" suggestion engine 
     var engine = new Bloodhound({ 
      remote: { 
       url: "{{ url('club/listall') }}"+'/%QUERY%', 
       wildcard: '%QUERY%' 
      }, 
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace, 
      queryTokenizer: Bloodhound.tokenizers.whitespace 
     }); 

     $(".club-search").typeahead({ 
      hint: true, 
      highlight: true, 
      minLength: 1 
     }, { 
      source: engine.ttAdapter(), 
      display: "name", 
      // This will be appended to "tt-dataset-" to form the class name of the suggestion menu. 
      name: 'clubsList', 

      // the key from the array we want to display (name,id,email,etc...) 
      templates: { 
       empty: [ 
        '<div class="list-group search-results-dropdown"><div class="list-group-item">Aucun club trouvé.</div></div>' 
       ], 
       header: [ 
        '<div class="list-group search-results-dropdown">' 
       ], 
       suggestion: function (data) { 
        if (data.blason == null) { 
         var aleat = hasard(1,4); 
         if (aleat == 1) { 
          var blason = "/images/blasons/blason-bleu.svg"; 
         } else if (aleat == 2) { 
          var blason = "/images/blasons/blason-orange.svg"; 
         } else if (aleat == 3) { 
          var blason = "/images/blasons/blason-rouge.svg"; 
         } else if (aleat == 4) { 
          var blason = "/images/blasons/blason-vert.svg"; 
         } 
        } 
        else { 
         var blason = "/images/blasons/" + data.blason; 
        } 
        return '<a href="{{ url('club') }}' + '/' + data.id + '" class="list-group-item"><span class="row">' + 
           '<span class="avatar">' + 
            '<img src="{{asset('/')}}' + blason + '">' + 
           "</span>" + 
           '<span class="name">' + data.name + '<br><small style="color:grey;">(Ligue ' + data.league_name + ')</small></span>' + 
          "</span>" 
      } 
      } 
     }); 
    }); 
</script> 

しかし、その正常に完全に動作していない...一般的には、それは結果を見つけたが、私検索クエリの例を挙げましょう。 1つの可能なクエリは "montagnarde"です。すべての手紙の結果をお渡しします。入力:

問題がどこにありますか? ありがとうございます!

+0

代わりに '使用する - 'で>取得()をクエリの終わりに ' - > toSql()'を使い、結果を出力するか 'dd()'します。これは実際に実行されているクエリを表示します - あなたが今やっているような便利なデバッグ。 – James

+0

正常に動作しているようです。あなたが見たいと思っている結果は何ですか? –

+0

結果は次のとおりです。 "clubs'.'id'、' clubs'.name'、 'clubs''blason'、' league''''''''''' clubs'' inner joinからの 'league_name'' 「リーグ」とは「クラブ」.league_id =リーグ.'id'は「クラブ」と呼ばれ、「名前」は「クラブ」による注文。「名前」は「asc」 –

答えて

0

文字列の連結が間違っていると思います。

あなたがこれを書くことができます@Dealeo
where('clubs.name', 'LIKE', '%' . $query. '%') 
+0

あなたの答えをありがとうが、これは同じ結果が ( 'clubs.name'、 'LIKE'、 '%'。$ query。 '%')または ここで( 'clubs.name'、 'LIKE'、 '%$ query%') –

+0

''%$ query% "'の使用には何も問題ありません。 PHPは変数を二重引用符で囲んだ文字列で補間します。 – Jonathon

0

にどこ文を変更してください。

パブリック関数LISTALL($クエリ){

dd($query); 

$clubs = Club::join('leagues', 'clubs.league_id', '=', 'leagues.id') 
->where('clubs.name', 'LIKE', '%' . $query . '%') 
->select('clubs.id', 'clubs.name', 'clubs.blason', 'leagues.name as league_name') 
->orderBy('clubs.name'); 

dd($clubs->toSql()); 

return Response::json($clubs); 

}

+0

ありがとうございますが、私はあなたのコードで同じ結果を得ています。 –

+0

@ Dealeo-JeromeMansbendel私は自分の答えを更新しました。これを試してみませんか? –

0

チェックを解決しますこれは:

->where('clubs.name', 'like', "%{$query}%") 
0

次のような検索クエリを使用する必要がある場合がありますうまくいけば、これは今、あなたの問題

public function listall($query) { 
     $Clubs = Club::Join('leagues', 'clubs.league_id', 'leagues.id') 
       ->where('clubs.name', 'LIKE', '%' . $query . '%') 
       ->select('clubs.id', 'clubs.name', 'clubs.blason', 'leagues.name as league_name') 
       ->orderBy('clubs.name') 
       ->get(); 

     return Response::json($Clubs); 
    } 
0

私はあなたがあなたのテーブル定義にCOLLATE UTF8_GENERAL_CIを追加し、(leftJoinで)このようなあなたのクエリを試してみることをお勧め:

public function listall($query) { 
     $Clubs = Club::leftJoin('leagues', 'clubs.league_id', '=', 'leagues.id') 
       ->where('clubs.name', 'like', "%$query%") 
       ->select('clubs.id', 'clubs.name', 'clubs.blason', 'leagues.name as league_name') 
       ->orderBy('clubs.name') 
       ->get(); 

     return Response::json($Clubs); 
    } 

ソートのUTF8の提案から:How can I search (case-insensitive) in a column using LIKE wildcard?

関連する問題