Laravel - oneToMany返回Undefined属性

时间:2015-01-22 22:33:13

标签: laravel eloquent eager-loading

我刚刚在所有帖子中搜索过这个问题,但我无法得到答案。

我有3个表:用户|分类|具有以下模型的部门:

  

user.php的

public function categorys(){
        return $this->hasMany('Category');
}
  

Category.php

public function user(){
    return $this->belongsTo('User');
}
public function sectors(){
    return $this->hasMany('Sector');
}
  

Sector.php

public function category(){
    return $this->belongsTo('Category');
}
  

  • 用户:
    • id,name
  • 的categorys:
    • id,name,user_id(fk)
  • 扇区:
    • ID,名称CATEGORY_ID(FK)

我想在一个视图中打印来自经过身份验证的用户的所有扇区,如下所示:

$user = new User;
$user = Auth::user(); 
$sectors = $user->categorys->sectors;

并在视图中的$ sectors变量中使用它

@foreach($sectors as $sector)
  {{ $sector->id }}
  {{ $sector->name }}
@endforeach

但是我收到了这个错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$sectors

需要帮助!感谢

BR

2 个答案:

答案 0 :(得分:0)

要么您忘记在文章中提及它,要么sector_id表中缺少categorys字段。

根据您的数据库结构,表categorys到表sectors

没有外键

答案 1 :(得分:0)

正如我前面提到的,是上述问题的答案。 hasmanythought关系是关联和简单查询thouse 3表的正确方法。

  

对于模型User.php,您需要创建关系:

public function sectors(){
    return $this->hasManyThrough('Sector','Category');
}
  

现在,您需要在控制器中执行以下操作:

$user = new User;
$user = Auth::user(); 
$sectors = $user->sectors;
#return the view showsectors
return View::make('showsectors')->with('sectors', $sectors);

使用此变量(扇区)在您的视图中打印查询结果(一个用户的所有部门描述),如下所示:

@foreach($sectors as $sector)
 {{ $sector->id }}
 {{ $sector->description }}
@endforeach

感谢您的帮助。

BR