2013-08-16 18 views
26

Mam formularz wyszukiwania i funkcje, wszystkie zrobione. Wystarczy zapytać, czy można to zrobić w Epokazującym kwerendzie:Laravel 4/5 formularz wyszukiwania jak

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

Aby wyświetlić niektóre możliwe pasujące nazwy. Moja obecna funkcja kontrolera:

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); 
} 

A mój widok:

<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> 

góry dzięki.

Odpowiedz

57

Hmmm, tak, ustaw jako operatora porównania like i wyślij ciąg znaków z %. Coś takiego:

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

Pozdrawiamy, Nev Naprawdę robiliśmy rzeczy z zapytaniami LIKE. Jak mogę uzyskać pasujące wyniki? Mam już konfigurację formularza wyszukiwania, ale nie wiem, jak wyświetlić pasujące wyniki? Czy możesz mi trochę pomóc? http://paste.laravel.com/K9O –

+2

Możesz sprawdzić, jak wyświetlić wyniki w postaci stronicowanej w [Laravel docs] (http://laravel.com/docs/pagination#usage). Polecam również wcięcie kodu widoku, który jest ledwo czytelny. – rmobis

+1

Pomaga mi to w przypadku mojego autouzupełniania jquery. –

17

Jeśli potrzebujesz często używać LIKE, możesz nieco uprościć problem. Niestandardowy sposób jak() mogą być tworzone w modelu, który dziedziczy wymowny:

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

Tak więc można użyć tej metody w taki sposób:

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

gdzie mogę umieścić funkcję "scopeLike"? Który plik? –

+1

@JoshPetitt, musisz umieścić tę metodę wewnątrz swojego modelu, a framework zobaczy ją automatycznie. (tutaj jest docs - https://laravel.com/docs/5.4/eloquent#query-scopes zobacz lokalne zakresy) – Kison

1

cytując sznurka:

$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 .'%'); 
} 

Spróbuj powyższy

Powiązane problemy