Cuando lo use, ->get()
no puede simplemente usar ninguno de los siguientes:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Porque si dd($result);
notas que Illuminate\Support\Collection
siempre se devuelve una instancia de , incluso cuando no hay resultados. Esencialmente, lo que está comprobando es $a = new stdClass; if ($a) { ... }
lo que siempre será verdadero.
Para determinar si hay algún resultado, puede hacer lo siguiente:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
También puede usar en ->first()
lugar de ->get()
en el generador de consultas que devolverá una instancia del primer modelo encontrado, o de lo null
contrario. Esto es útil si necesita o espera un solo resultado de la base de datos.
$result = Model::where(...)->first();
if ($result) { ... }
Notas / Referencias
Información de bonificación
Las diferencias de Collection y Query Builder pueden ser un poco confusas para los recién llegados de Laravel porque los nombres de los métodos son a menudo los mismos entre los dos. Por esa razón, puede ser confuso saber en qué estás trabajando. El generador de consultas esencialmente crea una consulta hasta que llame a un método donde ejecutará la consulta y golpeará la base de datos (por ejemplo, cuando llama a ciertos métodos como ->all()
->first()
->lists()
y otros). Esos métodos también existen en el Collection
objeto, que se pueden devolver desde el generador de consultas si hay varios resultados. Si no está seguro de en qué clase está trabajando realmente, intente hacer var_dump(User::all())
y experimentar para ver qué clases está regresando realmente (con la ayuda deget_class(...)
) Le recomiendo que consulte el código fuente de la clase Collection, es bastante simple. Luego, consulte el generador de consultas y vea las similitudes en los nombres de las funciones y descubra cuándo llega realmente a la base de datos.
first()
, el resultado es diferente deget()
, lo que puede verificarse!$result
como un resultado vacío esnull