Estoy usando el generador de consultas Eloquent de Laravel y tengo una consulta donde quiero una WHERE
cláusula sobre múltiples condiciones. Funciona, pero no es elegante.
Ejemplo:
$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();
¿Hay una mejor manera de hacer esto, o debería seguir con este método?
->where(...)
llamadas pueden ser reemplazados por una->whereIn(...)
llamada, etcétera .Respuestas:
En Laravel 5.3 (y sigue siendo cierto a partir de 7.x ) puede usar más wheres granulares pasados como una matriz:
Personalmente, no he encontrado un caso de uso para esto solo con varias
where
llamadas, pero el hecho es que puede usarlo.Desde junio de 2014 puede pasar una matriz a
where
Mientras desee todos los operadores de
wheres
usoand
, puede agruparlos de esta manera:Entonces:
Lo anterior dará como resultado dicha consulta:
fuente
=
.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
acuerdo con su respuesta al tener otroswhere
cluases?Los ámbitos de consulta pueden ayudarlo a permitir que su código sea más legible.
http://laravel.com/docs/eloquent#query-scopes
Actualizando esta respuesta con algún ejemplo:
En su modelo, cree métodos de ámbitos como este:
Luego, puede llamar a estos ámbitos mientras crea su consulta:
fuente
Puede usar subconsultas en funciones anónimas como esta:
fuente
En este caso, podría usar algo como esto:
Debería proporcionarle una consulta como:
fuente
Condiciones usando Array:
Producirá la consulta como abajo:
Condiciones que utilizan la función antónimo:
Producirá la consulta como abajo:
fuente
Múltiples cláusulas where
finalmente obteniendo el resultado
fuente
El
whereColumn
método se puede pasar una serie de condiciones múltiples. Estas condiciones se unirán utilizando eland
operador.Ejemplo:
Para obtener más información, consulte esta sección de la documentación https://laravel.com/docs/5.4/queries#where-clauses
fuente
O
O
fuente
Asegúrese de aplicar cualquier otro filtro a las subconsultas, de lo contrario, podría recopilar todos los registros.
fuente
fuente
Sin un ejemplo real, es difícil hacer una recomendación. Sin embargo, nunca he necesitado usar tantas cláusulas WHERE en una consulta y puede indicar un problema con la estructura de sus datos.
Puede ser útil para usted aprender sobre la normalización de datos: http://en.wikipedia.org/wiki/Third_normal_form
fuente
Puedes usar elocuente en Laravel 5.3
Todos los resultados
Resultados parciales
fuente
usar
whereIn
condición y pasar la matriz$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
fuente
Puede usar la matriz en la cláusula where como se muestra a continuación.
fuente
fuente
Según mi sugerencia si estás haciendo un filtro o buscando
entonces deberías ir con:
fuente
Utilizar este
fuente
Usando Eloquent puro, impleméntelo así. Este código devuelve todos los usuarios registrados cuyas cuentas están activas.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
fuente
Una muestra de código.
Primeramente :
la matriz se llena aquí usando el conteo / ciclo de condiciones deseado , de forma incremental:
y aquí:
y más con elocuentes como:
fuente
fuente
fuente