2013-08-16 5 views
26

Ho un modulo di ricerca e funzioni, tutto fatto. Basta chiedere, è possibile farlo in Eloquente una query come questa:Laravel 4/5 modulo di ricerca come

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

Per visualizzare alcune possibili nomi corrispondenti. Il mio attuale funzione di regolatore:

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

E mio punto di vista:

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

Grazie in anticipo.

risposta

57

Hmmm, sì, impostare like come operatore di confronto e inviare la stringa con %. Qualcosa del genere:

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

Grazie, nev er ha fatto davvero le cose con le query LIKE. Come posso ottenere i risultati corrispondenti? Ho già una configurazione del modulo di ricerca, ma non so come visualizzare i risultati corrispondenti? Potresti aiutarmi un po '? http://paste.laravel.com/K9O –

+2

Puoi dare un'occhiata a come visualizzare i risultati impaginati su [Laravel docs] (http://laravel.com/docs/pagination#usage). Inoltre, ti consiglio di indentare il tuo codice di visualizzazione, è appena leggibile. – rmobis

+1

Questo mi aiuta anche con il mio caso completamento automatico jQuery. –

17

Se è necessario utilizzare frequentemente LIKE, è possibile semplificare un po 'il problema. Un metodo personalizzato come() può essere creato nel modello che eredita l'eloquente:

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

Così allora è possibile utilizzare questo metodo in modo tale:

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

dove inserirò la funzione 'scopeLike'? Quale file? –

+1

@JoshPetitt, devi inserire questo metodo nel tuo modello e il framework lo vedrà automaticamente. (qui è docs - https://laravel.com/docs/5.4/eloquent#query-scopes vedi ambiti locali) – Kison

1

citando di stringa:

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

Prova quanto sopra