Estou usando o construtor de consultas Laravel Eloquent e tenho uma consulta em que quero uma WHERE
cláusula em várias condições. Funciona, mas não é elegante.
Exemplo:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Existe uma maneira melhor de fazer isso ou devo seguir esse método?
php
laravel
eloquent
laravel-query-builder
veksen
fonte
fonte
->where(...)
chamadas podem ser substituídos por uma->whereIn(...)
chamada, et cetera .Respostas:
No Laravel 5.3 (e ainda verdadeiro a partir do 7.x ), você pode usar onde mais granulares são passados como uma matriz:
Pessoalmente, não encontrei um caso de uso para isso em apenas várias
where
chamadas, mas o fato é que você pode usá-lo.Desde junho de 2014, você pode passar uma matriz para
where
Contanto que você queira todo o operador de
wheres
usoand
, você pode agrupá-los desta maneira:Então:
O acima irá resultar em tal consulta:
fonte
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
:?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
acordo com a sua resposta outraswhere
cluases?Os escopos de consulta podem ajudar você a deixar seu código mais legível.
http://laravel.com/docs/eloquent#query-scopes
Atualizando esta resposta com algum exemplo:
No seu modelo, crie métodos de escopos como este:
Em seguida, você pode chamar esses escopos ao criar sua consulta:
fonte
Você pode usar subconsultas em funções anônimas como esta:
fonte
Nesse caso, você pode usar algo como isto:
Deve fornecer uma consulta como:
fonte
Condições usando a matriz:
Produzirá consultas como abaixo:
Condições usando a função Antonymous:
Produzirá consultas como abaixo:
fonte
Cláusulas where múltiplas
finalmente obtendo o resultado
fonte
O
whereColumn
método pode receber uma matriz de várias condições. Essas condições serão unidas usando oand
operador.Exemplo:
Para obter mais informações, consulte esta seção da documentação https://laravel.com/docs/5.4/queries#where-clauses
fonte
OU
OU
fonte
Certifique-se de aplicar outros filtros às subconsultas, caso contrário, ou poderá reunir todos os registros.
fonte
fonte
Sem um exemplo real, é difícil fazer uma recomendação. No entanto, nunca precisei usar tantas cláusulas WHERE em uma consulta e isso pode indicar um problema com a estrutura dos seus dados.
Pode ser útil para você aprender sobre a normalização de dados: http://en.wikipedia.org/wiki/Third_normal_form
fonte
Você pode usar eloquente no Laravel 5.3
Todos os resultados
Resultados parciais
fonte
use
whereIn
condição e passe a matriz$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
fonte
Você pode usar a matriz na cláusula where, como mostrado abaixo.
fonte
fonte
Conforme minha sugestão, se você estiver fazendo filtro ou pesquisando
então você deve ir com:
fonte
Usa isto
fonte
Usando o Eloquent puro, implemente-o assim. Este código retorna todos os usuários conectados cujas contas estão ativas.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
fonte
Uma amostra de código.
Primeiramente :
A matriz é preenchida aqui usando a contagem / loop de condições desejada , incrementalmente:
e aqui:
e ainda mais com eloquentes como:
fonte
fonte
fonte