2013-08-16 30 views
26

Ich habe eine Suchmaske und Funktionen, alles fertig. Nur um zu fragen, ist es möglich, sie in Eloquent eine Abfrage wie dies zu tun:Laravel 4/5 Suchformular wie

SELECT * FROM players WHERE name LIKE '%".$name."%' 

Um einige mögliche passende Namen anzuzeigen. Meine aktuelle Reglerfunktion:

public function search() 
{ 
    $name = Input::get('character'); 
    $searchResult = Player::where('name', '=', $name)->paginate(1); 
    return View::make('search.search') 
      ->with('name', $name) 
      ->with('searchResult', $searchResult); 
} 

Und meine Ansicht:

<form id="custom-search-form" class="form-search form-horizontal pull-right" action="{{ URL::action('[email protected]') }}" method="get"> 
    <div class="input-append spancustom"> 
     <input type="text" class="search-query" name="character" placeholder="Character/guild name"> 
     <button type="submit" class="btn"><i class="icon-search"></i></button> 
    </div> 
</form> 

Vielen Dank im Voraus.

Antwort

57

Hmmm, ja, setzen Sie einfach like als Vergleichsoperator, und senden Sie die Zeichenfolge mit % 's. Etwas wie dieses:

Player::where('name', 'LIKE', "%$name%")->get(); 
+0

Danke, Nev Er hat wirklich Dinge mit LIKE-Abfragen gemacht. Wie kann ich die passenden Ergebnisse erhalten? Ich habe bereits ein Suchformular eingerichtet, weiß aber nicht, wie ich die passenden Ergebnisse anzeigen soll. Könntest du mir ein bisschen helfen? http://paste.laravel.com/K9O –

+2

Sie können sich ansehen, wie paginierte Ergebnisse in [Laravel docs] (http://laravel.com/docs/pagination#usage) angezeigt werden. Außerdem würde ich empfehlen, dass Sie Ihren Ansichtscode einrücken, er ist kaum lesbar. – rmobis

+1

Das hilft mir auch bei meinem Fall von jquery autocomplete. –

17

Wenn Sie LIKE häufig verwenden müssen, können Sie das Problem ein wenig vereinfachen. Eine benutzerdefinierte Methode, wie() kann im Modell erstellt werden, das die Eloquent erbt:

public function scopeLike($query, $field, $value){ 
     return $query->where($field, 'LIKE', "%$value%"); 
} 

So dann Sie diese Methode in einer solchen Art und Weise verwenden können:

User::like('name', 'Tomas')->get(); 
+0

Wo würde ich die Funktion 'scopeLike' setzen? Welche Datei? –

+1

@JoshPetritt, Sie müssen diese Methode in Ihr Modell einfügen und das Framework wird es automatisch sehen. (hier ist docs - https://laravel.com/docs/5.4/eloquent#query-scopes siehe lokale Bereiche) – Kison

1

mit Zitat von string:

$value = DB::connection()->getPdo()->quote('%' . strtolower($value) . '%'); 
$query->whereRaw('LOWER(your_table.your_column) LIKE ' . $value); 
0
public function get_student($match){ 
    return Student::where('name', 'like', $match .'%'); 
} 

Versuchen Sie, die oben