无法将Laravel关系检索为对象

时间:2014-04-04 19:07:20

标签: php laravel laravel-4

对于应该是一个相当简单的问题感到困惑。

我有两个彼此相关的对象:

class Country extends Eloquent {
    public function hotspot()
    {
        return $this->hasOne('Hotspot');
    }
}

class Hotspot extends Eloquent {
    public function country()
    {
        return $this->belongsTo('Country');
    }
}

我想检索我的热点及其所属的国家/地区,所以:

$hotspot_list = Hotspot::with('country')->get();

作为测试,我只想循环遍历列表并输出国家/地区代码:

foreach ($hotspot_list as $hotspot_item) {
    $hotspot = $hotspot_item->country;

    echo $hotspot->country_code;
}

引发错误:“试图获取非对象的属性”

显然我也做不到echo $hotspot_item->country->country_code;

如果我将$ hotspot作为数组访问,它的工作原理为:echo $hotspot['country_code'];

因此,我无法访问$ hotspot作为对象。由于$ hotspot实际上是一个Country对象,我想检查我与Country的另一个关系,但我不能,因为它给了我一个数组而不是对象。

所以即使我不应该这样做,我试过这个:

$country_id = $hotspot['id'];           
$country = Country::find($country_id);
echo $country->name;

仍然没有,它仍然作为一个数组返回,所以我可以做echo $country['name'];

建议?

1 个答案:

答案 0 :(得分:0)

确保所有热点都有国家/地区,或者您可以在循环播放时对其进行验证...

foreach ($hotspot_list as $hotspot_item) {
    $hotspot = $hotspot_item->country;

    if(isset($hotspot->country_code)) {
        echo $hotspot->country_code;
    }
}

如果你有Laravel 4.1,那就更好了,只有那些拥有热点的国家...

$hotspot_list = Hotspot::has('country')->get();