96 votes

Utilisation d'Eloquent ORM dans Laravel pour effectuer une recherche dans une base de données en utilisant LIKE

Je veux utiliser l'enregistrement actif d'Eloquent pour construire une requête de recherche, mais il s'agira d'une recherche LIKE. J'ai trouvé le User::find($term) o User::find(1) mais cela ne génère pas de déclaration similaire. Je ne cherche pas une réponse directe, mais si quelqu'un pouvait au moins me donner une direction à suivre, ce serait génial !

242voto

Joel Larson Points 879

Vous pouvez effectuer des recherches dans les bases de données en utilisant LIKE avec cette syntaxe :

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

65voto

Yaroslav Points 21

Si vous devez utiliser fréquemment LIKE, vous pouvez simplifier un peu le problème. Une méthode personnalisée comme () 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 cette manière :

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

29voto

dean grande Points 714

Pour info, la liste des opérateurs (contenant comme et tous les autres) est en code :

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

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

décharge de responsabilité :

La réponse de Joel Larson est correcte. J'ai eu mon upvote.

J'espère que cette réponse apportera plus de lumière sur ce qui est disponible via l'ORM Eloquent ( oriente les gens dans la bonne direction ). Alors qu'un lien vers la documentation serait loin mieux, ce lien s'est avéré insaisissable.

18voto

Myint Thu Lwin Points 209

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

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

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

3voto

Sinan Eldem Points 700

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X