Question Combinaison ET / OU requête éloquente dans Laravel


Comment puis-je écrire des requêtes similaires ou similaires avec Eloquent?

SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5

Je ne pouvais pas combiner ET / OU comme je le voulais en enchaînant les fonctions & or_where.


15
2018-03-27 06:46


origine


Réponses:


Vous pouvez imbriquer les clauses where: http://laravel.com/docs/database/fluent#nested-where

Model::where(function($query)
{
    $query->where('a', 'like', 'keyword');
    $query->or_where('b', 'like', 'keyword');
})
->where('c', '=', '1');

Cela devrait produire: SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1


33
2018-03-27 13:12



Pour une réponse plus précise à l'exemple:

$val = '%keyword%';

A_Table_Model::where(function($query) use ($val)
{
    $query->where('a', 'like', $val);
    $query->or_where('b', 'like', $val);
})
->where('c', '=', 1)
->where('d', '=', 5)
->get();

Note: Ceci est la syntaxe de Laravel 3, utilisez camelCase ouWhere () pour Laravel 4


7
2018-02-11 16:56



Dans Laravel 5.1+, cela fera aussi l'affaire et sera plus propre:

Model::where(function($query) {
    $query->where('a', 'like', 'keyword');
    $query->or_where('b', 'like', 'keyword');
})->where('c', '=', '1')->get();

2
2017-12-21 19:45



Vous pouvez utiliser DB::raw() en premier where() mettre dans le même / ou déclaration.


-3
2018-03-27 12:01