started index getting for documentacion content ciclo auth laravel laravel-4 eloquent laravel-collection

getting - laravel foreach index



Colección Elocuente: Contando y Detectando Vacío (8)

Esta puede ser una pregunta trivial, pero me pregunto si Laravel recomienda una cierta manera de verificar si una colección de Eloquent devolvió de $result = Model::where(...)->get() está vacía, además de contar el número de elementos.

Actualmente estamos usando !$result para detectar un resultado vacío, ¿es eso suficiente? En cuanto al count($result) , ¿cubre realmente todos los casos, incluido el resultado vacío?


Creo que estas buscando:

$result->isEmpty()

Esto es diferente de empty($result) , que no será cierto porque el resultado será una colección vacía. Su sugerencia de count($result) también es una buena solución. No encuentro ninguna referencia en los documentos.


Creo que intentas algo como

@if(!$result->isEmpty()) // $result is not empty @else // $result is empty @endif

o también usar

if (!$result) { } if ($result) { }


Cuando use ->get() no puede simplemente usar cualquiera de los siguientes:

if (empty($result)) { } if (!$result) { } if ($result) { }

Porque si dd($result); notará que siempre se devuelve una instancia de Illuminate/Support/Collection , incluso cuando no hay resultados. Esencialmente, lo que estás comprobando es $a = new stdClass; if ($a) { ... } $a = new stdClass; if ($a) { ... } que siempre devolverá verdadero.

Para determinar si hay resultados, puede hacer lo siguiente:

if ($result->first()) { } if (!$result->isEmpty()) { } if ($result->count()) { } if (count($result)) { }

También puede usar ->first() lugar de ->get() en el generador de consultas, que devolverá una instancia del primer modelo encontrado, o de lo contrario será null . Esto es útil si necesita o está esperando solo un resultado de la base de datos.

$result = Model::where(...)->first(); if ($result) { ... }

Notas / Referencias

Información de bonificación

Las diferencias entre la Colección y el Generador de consultas pueden ser un poco confusas para los recién llegados de Laravel porque los nombres de los métodos suelen ser los mismos entre los dos. Por esa razón, puede ser confuso saber en qué estás trabajando. El Generador de consultas esencialmente construye una consulta hasta que llama a un método donde ejecutará la consulta y llegará a la base de datos (por ejemplo, cuando llame a ciertos métodos como ->all() ->first() ->lists() y otros). Esos métodos también existen en el objeto Collection , que puede ser devuelto por el Generador de consultas si hay varios resultados. Si no está seguro de con qué clase está trabajando realmente, intente hacer var_dump(User::all()) y experimente para ver qué clases está regresando (con la ayuda de get_class(...) ). Le recomiendo que revise el código fuente de la clase Collection, es bastante simple. Luego revise el Generador de consultas y vea las similitudes en los nombres de funciones y averigüe cuándo llega a la base de datos.


Estoy de acuerdo con la respuesta aprobada anteriormente. Pero usualmente uso el método $results->isNotEmpty() como se indica a continuación.

if($results->isNotEmpty()) { //do something }

Es más detallado que if(!results->isEmpty()) porque a veces nos olvidamos de agregar ''!'' en frente que puede dar lugar a un error no deseado.

Tenga en cuenta que este método existe desde la versión 5.3 adelante.


Hay varios métodos dados en Laravel para verificar el conteo de resultados / verificar vacío / no vacío:

$result->isNotEmpty(); // True if result is not empty. $result->isEmpty(); // True if result is empty. $result->count(); // Return count of records in result.


Tu puedes hacer

$result = Model::where(...)->count();

para contar los resultados.

También puedes usar

if ($result->isEmpty()){}

Para comprobar si el resultado está vacío.


así que Laravel realmente devuelve una colección cuando solo usa Model::all(); no quieres una colección, quieres una matriz, así que puedes escribirla. (array)Model::all(); entonces puedes usar array_filter para devolver los resultados

$models = (array)Model::all() $models = array_filter($models); if(empty($models)) { do something }

Esto también te permitirá hacer cosas como count() .


------ SOLUCIONADO ------

En este caso, desea comprobar dos tipos de recuento para dos Cace

caso 1:

si el resultado contiene solo un registro, otra palabra, seleccione una fila de la base de datos usando -> first ()

if(count($result)){ ...record is exist true... }

caso 2:

si el resultado contiene un conjunto de varias filas con otra palabra usando -> get () o -> all ()

if($result->count()) { ...record is exist true... }