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
Model::first()
, en realidad está actuando sobre el 'primer' método del generador de consultas y NO de la colección, por lo tanto, elegirá el primero de la base de datos; sin embargoModel::get()
, devolverá una instancia de Illuminate \ Support \ Colección así que si lo hiciste$r = Model::get()
y luego$r->first()
seleccionará el primer elemento dentro de esa colección.count($result)
funciona; agregar ese detalle sería una mejora.foreach
bucle y luego usar una de estas comprobaciones (piense:)count($collection->column)
.Creo que estás buscando:
Esto es diferente de
empty($result)
, lo que no será cierto porque el resultado será una colección vacía. Su sugerencia decount($result)
también es una buena solución. No puedo encontrar ninguna referencia en los documentosfuente
Estoy de acuerdo con la respuesta aprobada arriba. Pero generalmente uso el
$results->isNotEmpty()
método que se indica a continuación.Es más detallado que
if(!results->isEmpty())
porque a veces nos olvidamos de agregar '!' en el frente, lo que puede provocar un error no deseado.Tenga en cuenta que este método existe desde la versión 5.3 en adelante.
fuente
Hay varios métodos dados en Laravel para verificar el conteo de resultados / verificar vacío / no vacío:
fuente
Creo que mejor usar
fuente
Creo que intentas algo como
o también usar
fuente
Tu puedes hacer
para contar los resultados.
También puedes usar
para verificar si el resultado está vacío o no.
fuente
De acuerdo con los estados de Laravel Documentation , puede usarlo de esta manera:
El
isEmpty
método regresatrue
si la colección está vacía; de lo contrario,false
se devuelve.fuente
por lo que Laravel en realidad devuelve una colección cuando solo usando
Model::all();
no quieres una colección, quieres una matriz para que puedas escribir set it.(array)Model::all();
entonces puedes usar array_filter para devolver los resultadosesto también te permitirá hacer cosas como
count()
.fuente
------ RESUELTO ------
en este caso, desea verificar dos tipos de conteo para dos cace
caso 1:
si el resultado contiene solo un registro, otra palabra, seleccione una sola fila de la base de datos usando -> primero ()
caso 2:
si el resultado contiene un conjunto de varias filas, otra palabra usando -> get () o -> all ()
fuente
Puedes usar:
$counter = count($datas);
fuente