Chciałbym użyć konstruktora zapytań z operatorem LIKE, ale nie działa poprawnie.Laravel, gdzie jak nie działa poprawnie
Oto mój kod w moim kontrolera:
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);
}
Tu jest mój kod 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>
Ale jej nie działa całkowicie prawidłowo ... W ogóle, to znajdzie wyniki, ale Poda przykład wyszukiwania. Jednym z możliwych zapytań jest "montagnarde". Dam ci wynik za każdy list. Wpisanie:
m --> lot of results
mo --> lot of results
mon --> lot of results
mont --> lot of results
monta --> lot of results
montag --> lot of results
montagn --> lot of results
montagna --> no result
montagnar --> finds only "J.S. MONTAGNARDE"
montagnard --> finds only "J.S. MONTAGNARDE"
montagnarde --> finds only "J.S. MONTAGNARDE" and "LA MONTAGNARDE"
montagnarde i --> finds only "U.S. MONTAGNARDE INZINZAC"
Czy ktoś widzi, gdzie jest problem? Z góry dziękuję!
Zamiast '-> get()' w na końcu zapytania użyj '-> toSql()', a następnie wydrukuj lub 'dd()' wynik. Spowoduje to wyświetlenie zapytania, które faktycznie jest uruchamiane - przydatne debugowanie, tak jak teraz. – James
Wygląda na to, że działa poprawnie. Jaki jest wynik, który spodziewasz się zobaczyć? –
Oto wynik: "wybierz' trefle''id', 'trefl''name',' trefle''blason', 'lig''name' jako' nazwa_licencji' od 'trefl' join wewnętrzny 'ligi' na' trefl''league_id' = 'ligi''id' gdzie' trefl''namename 'like 'club''name' asc" –