Laravel 4的all()方法最近开始返回Eloquent集合 - 为什么?

This is my controller:

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

Previously, I checked it on views like this: (and it worked on all my projects)

@if(!empty($listings))
     //use foreach and show listings
@else
     <h3>No listing is found.</h3>
@endif

This is my Listing model.

class Listing extends Eloquent {

     public static $key = 'id';
     protected $table = 'ilanlar';
     public $timestamps = false;
}

Right now, it works when there is an entry in database. However, when there is not, it doesn't get to the else block. Because:

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

And, when I output listings variable:

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

This is the reason why it doesn't reach else block, because Eloquent returns and object and it casts to true.

The problem is: I don't know why it returns an Eloquent collection. Previously it didn't. Am I overlooking something?

The Collection object has a isEmpty() method, so you could use that:

@if(! $listings->isEmpty())
    //use foreach and show listings
@else
    <h3>No listing is found.</h3>
@endif

Alternatively, you can convert everything to an Array:

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

And use everything as an array within your views:

@if(!empty($listings))
    @foreach(listings as $listing):
    <li>{{ $listing['name'] }}</li>  <!-- Note $listing is treated as an array -->
    @endforeach
@else
    <h3>No listing is found.</h3>
@endif

This is a known issue (if you'd call it an issue) the solution is to do @if(count($listings))

as you can see here