我们正在将旧的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');
}
这似乎是正确的。我在这里不知所措。
答案 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';
干杯