Utilizzo di Eloquent ORM in Laravel per eseguire la ricerca nel database utilizzando LIKE


94

Voglio utilizzare la creazione di record attivi di Eloquent per creare una query di ricerca, ma sarà una ricerca LIKE. Ho trovato User::find($term)o User::find(1), ma questo non sta generando un'istruzione simile. Non sto cercando una risposta diretta, ma se qualcuno potesse almeno darmi una direzione in cui guardare, sarebbe fantastico!


2
laravel.com/docs/database/eloquent .. puoi usare la documentazione, è molto chiaro.
ytsejam

2
Ho visto questa pagina semplicemente non ho visto nulla sulla ricerca con caratteri jolly. Inoltre non volevo impostare una regex in un ciclo foreach poiché ci sono centinaia di migliaia di righe
Jonathan

$ email = DB :: table ('utenti') -> dove ('id', '=', 1) -> solo ('email');
ytsejam

si chiama generatore di query fluente nei documenti.
ytsejam

Se potessi contrassegnare la risposta e il tuo commento come risposta, lo farei. Grazie per avermi portato nella giusta direzione
Jonathan

Risposte:


235

Sei in grado di trovare database utilizzando LIKE con questa sintassi:

Model::where('column', 'LIKE', '%value%')->get();

1
non così efficiente, genera "Errore irreversibile: raggiunto il livello massimo di annidamento della funzione '100', interruzione! in ..."
Sasi varna kumar

@gsk Penso che ti unisci (usando il metodo with ()) e quindi puoi cercare nella colonna come al solito. La sintassi è probabilmente qualcosa di simile table.field.
Anthony

64

Se devi usare spesso MI PIACE, puoi semplificare un po 'il problema. Un metodo personalizzato come () può essere creato nel modello che eredita l'ORM eloquente:

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

Quindi puoi usare questo metodo in questo modo:

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

Questo è il modo più "Laravel" di farlo. È semplicemente più pulito e ti consente di regolare l'ottica in un unico punto, invece di dover andare in giro e regolare ciascuno ->where().
Daniel Dewhurst

amo davvero questa risposta. Questo rende il modello e il suo utilizzo molto eleganti, di cui parla laravel.
decimo imperatore

29

Cordiali saluti, l'elenco degli operatori (contenente like e tutti gli altri) è nel codice:

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

disclaimer:

La risposta di Joel Larson è corretta. Ho il mio voto positivo.

Spero che questa risposta faccia più luce su ciò che è disponibile tramite Eloquent ORM ( indica le persone nella giusta direzione ). Sebbene un collegamento alla documentazione sarebbe di gran lunga migliore, tale collegamento si è dimostrato sfuggente.


18

Usa virgolette doppie invece di virgolette singole, ad esempio:

where('customer.name', 'LIKE', "%$findcustomer%")

Di seguito il mio codice:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

Se non ti piacciono le virgolette doppie come me, questo funzionerà per te con virgolette singole:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.