2016-06-14 12 views
1

何か間違っていますか?Laravel 4 IF条件の変数の奇妙な振る舞い

$things = DB::table('things')->paginate(20); 

if ($things) { 
    $view_data = [ 
     'have_items' => 'yes', 
    ]; 
} else { 
    $view_data = [ 
     'have_items' => 'no', 
    ]; 
} 

が、私はこれをしなければならない:

$things = DB::table('things')->paginate(20); 

if ($things === true) { 
    $view_data = [ 
     'have_items' => 'yes', 
    ]; 
} else { 
    $view_data = [ 
     'have_items' => 'no', 
    ]; 
} 

をして、それが動作します

Laravel 4で、これは動作しません。

他のフレームワークでは、if ($things)のように問題なく動作します。

私が何か間違っていると誰かに教えてもらえますか、それともそのように動作するはずですか?

+0

を持っていますか?それはヌルですか? –

+0

テーブルが空の場合は0、そうでない場合は1または2など、そのテーブルの行数に応じてmy code: '$ count = count($ things); echo $ count; ' –

答えて

1

$変数をcount()機能を使用して変数にチェックしてみてください。価値があるかどうかをチェックする。あなたは、これが役立ちます。この

$things = DB::table('things')->paginate(20); 

if (count($things)>0) { 
    $view_data = [ 
     'have_items' => 'yes', 
    ]; 
} else { 
    $view_data = [ 
     'have_items' => 'no', 
    ]; 
} 

希望:) :)

+0

ありがとう、おそらくあなたのソリューションのようにチェックしますが、それは他のフレームワークと少し違って見えますか?どのように致命的なカウント(0関数?それはチェックのために過度ではありませんか?) –

+0

あなたが書いたコードは、明らかに最初のものは私には間違いないようです。通常の構文。 – Sakil

0

私は何が問題が$thingsは必ずしもヌルではないかもしれませんが、それは空の配列にできることである原因だと思います[またはのようなものを確認することができますコレクション]。この方法では、if($things)の条件が満たされても、何も含まれていない可能性があります。そのため、if (count($things) > 0)、さらにはif (!empty($things))などの追加チェックを行う必要があります。

0

$ thingsがブール値であることを確認することができます。 変数$を出力して何を表示するか試してみてください

0

paginate()LengthAwarePaginatorを返します。これは常にtrueと評価されます。あなたは何を得るのです$物事の数をすればLengthAwarePaginatorはあなたが以下のような何かを行うことができますので、使用することができますisEmpty()方法...

$things = DB::table('things')->paginate(20); 
$view_data = [ 
    'have_items' => $things->isEmpty() ? 'no' : 'yes', 
];