Ejemplos de consultas con Eloquent
1. Obtener registros de una tabla sin condiciones
Las búsquedas se realizan sin aplicar criterios concretos,
es decir que se devolverían todos los registros de la tabla.
2. Obtener registros de una tabla con condiciones
Las búsquedas se realizan aplicando criterios concretos,
es decir que se devolverían los registros de la tabla que cumplan
las condiciones de la búsqueda.
3. Obtener registros de una tabla con límites, ordenaciones, etc
Hay ciertas operaciones que se usan independientemente del
criterio de búsqueda para limitar el número de registros devuelto,
ordenarlos, etc.
4. Otras operaciones, como contar registros
5. Notas
1. Obtener registros de una tabla sin condiciones
Obtener todos los registros de una tabla, por ejemplo, "users":
$users = User::all();
// o bien:
$users = User::get();
Obtener todos los registros de una tabla sólo con ciertos campos,
por ejemplo, "users" obteniendo solo los campos "name", "gender" y "age":
$users = User::get([
'name',
'gender',
'age',
]);
También podríamos usar el método select()
para hacer esta consulta. Es quiza más semántico, pero su principal
diferencia es que no necesitamos pasarle un array con los campos,
entonces podemos hacerlo así:
$users = User::select([
'name',
'gender',
'age',
])->get();
// o así:
$users = User::select(
'name',
'gender',
'age',
)->get();
Obtener todos los registros de una tabla excluyendo campos concretos,
por ejemplo, obtener "users" excluyendo los campos "gender" y "age":
$users = User::all()->makeHidden([
'gender',
'age',
]);
Índice de contenidos
2. Obtener registros de una tabla con condiciones
Obtener un registro con una ID determinada, por ejemplo, el usuario con ID 7:
Obtener un dato de un registro con una ID determinada, por ejemplo, el email del usuario con ID 7:
$user = User::where('id', 7)->get('email');
// o mejor aún:
$user = User::where('id', 7)->get('email')->first();
¿Por qué es mejor la última consulta?
Como resultado devuelve el objeto y no una colección con el objeto.
Algo más sencillo, para obtener el objeto:
$user = User::where('id', 7)->first(['email']);
Y más sencillo todavía:
$user = User::find(7, ['email']);
Para obtener varios registros conociendo sus identificadores, por ejemplo,
los usuarios con identificadores 7, 8 y 12:
$user = User::find([7, 8, 12]);
Obtener registros con un valor determinado, por ejemplo, los usuarios
con edad 18 años:
$users = User::where('age', 18)
->get();
Obtener el primer registro con un valor determinado,
por ejemplo, el primer usuario con edad 18 años:
$user = User::where('age', 18)
->first();
Obtener el último registro con un valor determinado,
por ejemplo, el último usuario con edad 18 años:
$user = User::where('age', 18)
->orderBy('id', 'DESC')
->first();
NOTA: Suponiendo que el identificador de la tabla sea 'id' y que este sea autoincremental. Otra posibilidad sería usar el campo 'created_at' en lugar de 'id'.
Obtener registros con un valor mayor a uno determinado, por ejemplo, los usuarios de más 18 años:
$users = User::where('age',
'>',
18)
->get();
O de acuerdo a un intervalo, por ejemplo, los usuarios de entre 18 y 45 años:
$users = User::where('age', '>=', 18)
->where('age',
'<=',
45)
->get();
Esta última consulta equivale a una consulta con
WHERE ... AND ..., es decir
que genera la consulta SQL:
SELECT * FROM `users` WHERE `age` >= 18
AND `age` <= 45
Para usar la condición OR se usa orWhere():
$users = User::where('age', '>', 18)
->orWhere('profession', 'barman')
->get();
Que se traduce en la siguiente consulta:
SELECT * FROM `users` WHERE `age` >= 18
OR `profession` = 'barman'
Índice de contenidos
3. Obtener registros de una tabla con límites, ordenaciones, etc
Limitar el número de registros que devuelve una consulta, por ejemplo, obtener solo los 25 primeros usuarios:
$users = User::take(25)->get();
Limitar el número de registros que devuelve una consulta
saltando un número de registros, por ejemplo, obtener 5 usuarios,
saltándose el primero:
$users = User::skip(1)->take(5)->get();
Índice de contenidos
4. Otras operaciones
Contar los registros de una tabla, por ejemplo, el número de usuarios:
$users_number = User::count();
Esto da el mismo resultado que:
$users_number = User::all()->count();
// o que:
$users_number = User::get()->count();
Si bien en el primer caso es el SGBD quien cuenta los registros, mientras que en los alternativos se cuentan despues de obtenerlos (menos óptimo).
En caso de que se vayan a utilizar los datos de la tabla:
$users = User::all();
$users_number = $users->count();
Es decir, obtenemos la colección de objetos y,
seguidamente, los contamos para evitar realizar dos consultas a la BD.
Índice de contenidos
Notas:
Los métodos
all() y get()
al final de una consulta devuelven una colección de objetos Eloquent,
aunque sólo haya un resultado, si se usa por ejemplo
first() se obtiene un sólo objeto.
Esto es importante a la hora de acceder a los datos. Por ejemplo,
si esperamos un objeto, podríamos tener como resultado
null, si solicitamos una colección y no
hay resultados, tendremos una colección vacía
pero no null.
Es muy habitual usar
métodos para trabajar con colecciones Eloquent,
algunos son comunes a los de
colecciones
no Eloquent, de echo las colecciones Eloquent
extienden a las colecciones, y hay que saber cuando usar cada tipo.
Índice de contenidos