web-dev-qa-db-fra.com

Utiliser Eloquent ORM dans Laravel pour effectuer une recherche dans la base de données en utilisant LIKE

Je souhaite utiliser la construction active des enregistrements d'Eloquent pour créer une requête de recherche, mais il s'agira d'une recherche LIKE. J'ai trouvé le User::find($term) ou User::find(1), mais cela ne génère pas une instruction similaire. Je ne cherche pas une réponse directe, mais si quelqu'un pouvait au moins me donner une direction à regarder, ce serait génial!

89
Jonathan

Vous pouvez faire des recherches dans la base de données en utilisant LIKE avec cette syntaxe:

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

Si vous devez utiliser fréquemment LIKE, simplifiez un peu le problème. Une méthode personnalisée telle que () peut être créée dans le modèle qui hérite de l'ORM Eloquent:

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

Vous pouvez donc utiliser cette méthode de la manière suivante:

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

Pour votre information, la liste des opérateurs (contenant comme et tous les autres) est dans le code:

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

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

avertissement:

La réponse de Joel Larson est correcte. J'ai mon vote positif.

J'espère que cette réponse jette plus de lumière sur ce qui est disponible via l'ORM Eloquent ( pointe les gens vers la droite ). Même si un lien vers la documentation serait loin meilleur, ce lien s’est révélé insaisissable.

28
dean grande

Utilisez des guillemets doubles au lieu de guillemets simples, par exemple:

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

Ci-dessous mon code:

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");
}
16
Myint Thu Lwin

Si vous n'aimez pas les guillemets doubles comme moi, cela fonctionnera pour vous avec des guillemets simples:

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

return view('pages/search/index', compact('books'));
3
Sinan Eldem