0

これは私のコントローラーです:

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

以前は、次のようなビューで確認しました (そして、すべてのプロジェクトで機能しました)。

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

これが私のリスティング モデルです。

class Listing extends Eloquent {

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

現在、データベースにエントリがある場合に機能します。ただし、無い場合はelseブロックまで行きません。なぜなら:

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

そして、リスト変数を出力すると:

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

これが、Eloquent がオブジェクトを返し、true にキャストするため、else ブロックに到達しない理由です。

問題は、Eloquent コレクションを返す理由がわかりません。以前はそうではありませんでした。私は何かを見落としていますか?

4

2 に答える 2

1

Collection オブジェクトにはisEmpty()メソッドがあるため、次のように使用できます。

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

または、すべてを配列に変換できます。

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

ビュー内ですべてを配列として使用します。

@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
于 2013-11-06T15:08:22.057 に答える
1

これは既知の問題です (問題と呼ぶ場合)、解決策は次のとおりです。@if(count($listings))

ここでわかるように

于 2013-11-06T14:19:11.833 に答える