Laravel-oneToMany返回未定义的属性

Laravel-oneToMany返回未定义的属性,laravel,eloquent,eager-loading,Laravel,Eloquent,Eager Loading,我只是在所有的帖子中搜索这个问题,但我无法得到答案 我有3个表:用户|类别|部门,模型如下: User.php Category.php Sector.php 桌子 用户: 身份证,姓名 类别: id、名称、用户id(fk) 部门: id、名称、类别\u id(fk) 我想在视图中打印已验证用户的所有扇区,如下所示: $user = new User; $user = Auth::user(); $sectors = $user->categorys->sector

我只是在所有的帖子中搜索这个问题,但我无法得到答案

我有3个表:用户|类别|部门,模型如下:

User.php

Category.php

Sector.php

桌子

  • 用户:
    • 身份证,姓名
  • 类别:
    • id、名称、用户id(fk)
  • 部门:
    • id、名称、类别\u id(fk)
我想在视图中打印已验证用户的所有扇区,如下所示:

$user = new User;
$user = Auth::user(); 
$sectors = $user->categorys->sectors;
并在视图中的$sections变量中使用此选项

@foreach($sectors as $sector)
  {{ $sector->id }}
  {{ $sector->name }}
@endforeach
但我得到了这个错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$sectors
需要帮助!谢谢


BR

您可能忘记在文章中提到它,或者
类别
表中缺少
扇区id
字段


根据您的数据库结构,表
类别
到表
扇区
之间没有外键,正如我前面提到的,这里是上述问题的答案。 HasmanyThink关系是关联和轻松查询3个表的正确方法

对于model User.php,您需要创建以下关系:

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

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

@foreach($sectors as $sector)
 {{ $sector->id }}
 {{ $sector->description }}
@endforeach
谢谢你的帮助


BR

再努力一点,这里至少有几个问题,所以要讨论这个问题。对于这种情况,您有
hasManyThrough
关系。您是否在
类别
模型上指定了
表格
?因为
categories
是默认值,所以雄辩者将搜索。是的,我将表的名称指定为“categoris”,我找到了解决方案。正如Jarek Tkaczyk所说的那样,哈斯曼尼思之路是存在的。在用户模型
公共函数sectors(){return$this->hasManyThrough('Sector','Category');}
中使用它,并在控制器视图中使用:`$sectors=$User->sectors;`感谢您的帮助而不是使用:
$sectors=$user->categories->sectors使用:
$sectors->load('categorys.sectors')您好,由于我修复了上一个问题,我有另一个问题。假设我有一个4º表(成本,带扇区id),它属于扇区表。如何从一个用户id获取所有成本?我尝试了
return$this->hasManyThrough('Cost'、'Sector'、'Category')
在User.php中,用于
函数成本()
但我无法检索到任何需要的信息。溴
@foreach($sectors as $sector)
  {{ $sector->id }}
  {{ $sector->name }}
@endforeach
Undefined property: Illuminate\Database\Eloquent\Collection::$sectors
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