El método all () de Laravel 4 comenzó a devolver la colección Eloquent últimamente, ¿por qué?

Este es mi controlador:

return View::make('home.listings') ->with('listings', Listing::all()); 

Anteriormente, lo comprobé en vistas como esta: (y funcionó en todos mis proyectos)

 @if(!empty($listings)) //use foreach and show listings @else 

No listing is found.

@endif

Este es mi modelo de Listado.

 class Listing extends Eloquent { public static $key = 'id'; protected $table = 'ilanlar'; public $timestamps = false; } 

En este momento, funciona cuando hay una entrada en la base de datos. Sin embargo, cuando no lo hay, no llega al bloque else. Porque:

 dd(!empty($listings)) //output: (boolean) true 

Y, cuando saqué una variable de listados:

 dd($listings) //outputs: object(Illuminate\Database\Eloquent\Collection)[229] protected 'items' => array (size=0) empty 

Esta es la razón por la cual no llega al bloque else, porque Eloquent regresa y se convierte en objeto y se convierte en verdadero.

El problema es: no sé por qué devuelve una colección Eloquent. Anteriormente no. ¿Estoy pasando por alto algo?

El objeto Collection tiene un método isEmpty() , por lo que podría usar eso:

 @if(! $listings->isEmpty()) //use foreach and show listings @else 

No listing is found.

@endif

Alternativamente, puedes convertir todo en una matriz:

 return View::make('home.listings') ->with('listings', Listing::all()->toArray()); 

Y usa todo como una matriz dentro de tus puntos de vista:

 @if(!empty($listings)) @foreach(listings as $listing): 
  • {{ $listing['name'] }}
  • @endforeach @else

    No listing is found.

    @endif

    Este es un problema conocido (si lo llamarías un problema) la solución es hacer @if(count($listings))

    como puedes ver aquí