在PHP7升级上,Laravel HasMany在empty()上返回true

时间:2018-04-09 12:42:24

标签: laravel php-7

我们正在将旧的Laravel 4应用程序迁移到PHP 7.目前,此刀片代码在PHP 5.6上返回false:

@if(empty($review->region->region_slug) || empty($review->city->city_slug) || empty($review->park->park_slug))

但是,一旦我们尝试在PHP 7上运行它,它将返回true。我追溯了它,发现它返回true:

empty($review->region->region_slug)

但是,如果我事先使用它,它将返回false。例如:

echo $review->region->region_slug;

echo empty($review->region->region_slug) ? 'TRUE' : 'FALSE';

将返回slug并返回FALSE。

评论模型具有如下关系:

    public function region()
    {
        return $this->belongsTo('Region', 'cgr_region_id');
    }

这似乎是正确的。我在这里不知所措。

2 个答案:

答案 0 :(得分:0)

我通过急切地加载对象解决了这个问题。所以而不是:

Reviews::findOrFail($id); 

我加载它:

Reviews::with('region', 'city', 'park')->findOrFail($id);

答案 1 :(得分:0)

这实际上是Eloquent Collection的结果,自Laravel 4以来可能已经走了很长一段路。基本上,集合对象不为空,只有可填写的集合属性。因此,要解决此问题,您只需在集合对象上调用isEmpty()方法,如果它真的为空,则您的三元操作应该正常工作。

这应该有效:

echo ($review->region->region_slug)->isEmpty() ? 'TRUE' : 'FALSE';

干杯