Laravel 4/5 Suchformular wie

Lesezeit: 2 Minuten

Benutzer-Avatar
erm_durr

Ich habe ein Suchformular und Funktionen, alles fertig. Nur um zu fragen, ist es möglich, in Eloquent eine Abfrage wie diese durchzuführen:

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

Um einige mögliche übereinstimmende Namen anzuzeigen. Meine aktuelle Controller-Funktion:

    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('CharactersController@search') }}" 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>

Danke im Voraus.

Benutzer-Avatar
rmobis

Hmmm, ja, einfach einstellen like als Ihren Vergleichsoperator und senden Sie die Zeichenfolge mit %‘s. Etwas wie das:

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

  • Danke, nie wirklich Dinge mit LIKE-Abfragen gemacht. Wie kann ich die übereinstimmenden Ergebnisse erhalten? Ich habe bereits ein Suchformular eingerichtet, weiß aber nicht, wie ich die übereinstimmenden Ergebnisse anzeigen kann? Könnt ihr mir ein bisschen helfen? paste.laravel.com/K9O

    – erm_durr

    17. August 2013 um 9:31 Uhr

  • Sie können sich ansehen, wie paginierte Ergebnisse angezeigt werden Laravel-Dokumente. Außerdem würde ich empfehlen, dass Sie Ihren Ansichtscode einrücken, er ist kaum lesbar.

    – rmobis

    18. August 2013 um 4:57 Uhr

  • Dies hilft mir auch bei meinem Jquery-Autocomplete-Fall.

    – Andreas Koper

    5. April 2014 um 21:19 Uhr

  • Dies kann zu unerwarteten Ergebnissen führen, wenn der Benutzer “%” in $name FYI eingegeben hat.

    – Hesekiel Viktor

    25. September 2015 um 23:13 Uhr

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

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

Dann können Sie diese Methode folgendermaßen verwenden:

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

  • Wo würde ich die Funktion ‘scopeLike’ platzieren? Welche Datei?

    – Josh Petitt

    7. November 2016 um 23:44 Uhr

  • @JoshPetitt, Sie müssen diese Methode in Ihr Modell einfügen, und das Framework wird sie automatisch sehen. (Hier sind Dokumente – laravel.com/docs/5.4/eloquent#query-scopes siehe lokale Geltungsbereiche)

    – Den Kison

    3. Februar 2017 um 15:54 Uhr

Mit Anführungszeichen der Zeichenfolge:

$value = DB::connection()->getPdo()->quote('%' . strtolower($value) . '%');
$query->whereRaw('LOWER(your_table.your_column) LIKE ' . $value);

public function get_student($match){
    return Student::where('name', 'like', $match .'%');
}

Versuchen Sie es oben

1153390cookie-checkLaravel 4/5 Suchformular wie

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy