首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索Laravel关系时遇到的困难

检索Laravel关系时遇到的困难
EN

Stack Overflow用户
提问于 2014-04-04 19:07:20
回答 1查看 67关注 0票数 0

对什么应该是相当直截了当的问题感到困惑。

我有两个相互关联的物体:

代码语言:javascript
复制
class Country extends Eloquent {
    public function hotspot()
    {
        return $this->hasOne('Hotspot');
    }
}

代码语言:javascript
复制
class Hotspot extends Eloquent {
    public function country()
    {
        return $this->belongsTo('Country');
    }
}

我想找回我的热点和它们所属的国家,所以:

代码语言:javascript
复制
$hotspot_list = Hotspot::with('country')->get();

作为一个测试,我只想遍历列表并输出国家代码:

代码语言:javascript
复制
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之间的另一个关系,但是我做不到,因为它给了我一个数组而不是这个对象。

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

代码语言:javascript
复制
$country_id = $hotspot['id'];           
$country = Country::find($country_id);
echo $country->name;

仍然不去,它仍然作为数组返回,所以我可以做echo $country['name'];

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-04 19:37:24

确保你所有的热点都有国家,或者你可以在循环时验证它们.

代码语言:javascript
复制
foreach ($hotspot_list as $hotspot_item) {
    $hotspot = $hotspot_item->country;

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

或者更好的是,如果你有拉拉维尔4.1,只有那些有热点的国家.

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22871111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档