Laravel 4在IF条件下变量的奇怪行为

时间:2016-06-14 20:50:23

标签: php laravel

我做错了吗?

在Laravel 4中,这不起作用:

$output = file_get_contents($url);

我必须这样做:

code=H12 desc="Request timeout" method=GET path="/data.php/mailmkt/email" 
host=xxxxxxx request_id=xxxxx fwd="xx.xx.xx.xx" dyno=web.1 connect=0ms 
service=30001ms status=503 bytes=0

然后它有效。

在其他框架中,它的工作方式与$things = DB::table('things')->paginate(20); if ($things) { $view_data = [ 'have_items' => 'yes', ]; } else { $view_data = [ 'have_items' => 'no', ]; } 一样没有任何问题。

有人可以告诉我,如果我做错了什么,或者它应该像那样工作?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用 count()功能检查 $ things 变量吗?检查是否有价值。你可以查看这样的东西

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

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

希望这会有所帮助:):)

答案 1 :(得分:0)

我认为导致问题的原因是$things可能不一定是null,但它可以是一个空数组[或集合]。这样它可以通过if($things)条件,但仍然不包含任何内容。这就是为什么你应该进行额外检查,例如if (count($things) > 0)或更好if (!empty($things))

答案 2 :(得分:0)

你可能想确保$ things是布尔值。 还尝试打印变量$ things以查看它带来的内容

答案 3 :(得分:0)

paginate()将返回LengthAwarePaginator,其总是评估为trueLengthAwarePaginator有一个方法isEmpty(),您可以使用,以便您可以执行以下操作...

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