Pasar al contenido principal

Eloquent, diferencia entre find y get

Eloquent, diferencia entre find y get

developer
 
 
 
 
 
 

Eloquent es el ORM de Laravel, lo hemos visto en el Curso PHP Avanzado con Laravel.

En este artículo quiero contarte sobre un problema con el que me encontré cuando estaba dando mis primeros pasos con Eloquent.

Mi objetivo era servir estadísticas de recursos humanos del empleado que coincidiera con un id dado.

En mi mente la consulta que se requería se construyó así:

Busca el registro de la tabla usuario donde (where) el id sea el que recibo en la petición.

Deduje entonces que la instrucción para obtener la información general del empleado sería:


$empleado = Empleado::find(1);

Luego, si el empleado existiera, buscaría la información relacionada en la base de datos de recursos humanos:


if ($empleado->isEmpty()) {
    // Devuelve un mensaje indicando que no existe un usuario con el id recibido.
}

// Continúan las instrucciones porque el usuario sí existe.

Como prueba, intenté obtener la información con un id que no existía, esperando el mensaje que me dijera eso precisamente; pero en su lugar un error de PHP saltó a la vista:

No se puede usar el método isEmpty() sobre null.

Entonces lo entendí:

La función find() devuelve null cuando el usuario no existe.

Quise saber por qué mi mente me llevó a usar isEmpty() cuando sólo tenía que hacer esto:


if (!$empleado) {
    // Devuelve un mensaje indicando que no existe un usuario con el id recibido.
}

// Continúan las instrucciones porque el usuario sí existe.

Consulté la documentación de Laravel para saber cuándo podía usar isEmpty(), descubrí que la función sólo está disponible para una colección de datos, las colecciones de Laravel son arrays con superpoderes, disponen de una serie de funciones muy útiles, entre ellas isEmpty().

El método find($id) devuelve la instancia del modelo o null, no una colección.

Si quisiera obtener una colección para mi caso, aunque con un sólo elemento, podría usar:


$empleado = Empleado::where('id', 1)->get();

De esta forma, al ser una colección sí tendría disponible la función isEmpty().

En conclusión


// Retorna null si no encuentra el registro.
$empleado = Empleado::find(1);

// Retorna una colección vacía en caso de no encontrar un registro.
$empleado = Empleado::where('id', 1)->get();

Aprendemos más de los errores que cuando las cosas salen a la primera.

Si quieres aprender más de Laravel y su ORM Eloquent, te espero en las clases del Curso PHP Avanzado con Laravel de EDteam. ;)

Eso es todo por ahora gente del futuro, chao, chao.