Php 指向同一表中记录的雄辩关系
我有一个员工表,如下所示:Php 指向同一表中记录的雄辩关系,php,laravel,eloquent,relational-database,Php,Laravel,Eloquent,Relational Database,我有一个员工表,如下所示: 身份证 名字 主管 这里有所有的员工,这是我仅有的一张桌子 主管字段保存主管的id,该id与员工保存在同一个表中 我有一个表格,它打印出所有员工,以及他们的主管 现在,它只打印主管的id。我正在尝试将该id转换为主管的姓名。所以我决定在同一个模型中使用'belongsTo()'和'hasMany()' 我尝试过各种型号和控制器代码,但每次都会出现不同的错误。我认为我的控制方是问题所在 员工模式 // 公共职能雇员(){ 返回$this->belongsTo('Em
- 身份证
- 名字
- 主管
主管
字段保存主管
的id
,该id与员工
保存在同一个表中
我有一个表格,它打印出所有员工
,以及他们的主管
现在,它只打印主管的id
。我正在尝试将该id
转换为主管的姓名。所以我决定在同一个模型中使用'belongsTo()'和'hasMany()'
我尝试过各种型号和控制器代码,但每次都会出现不同的错误。我认为我的控制方是问题所在
员工模式
//
公共职能雇员(){
返回$this->belongsTo('Employee','id');
}
公共职能经理(){
返回$this->hasMany('Employee','id');
}
员工控制员
$employees=employeen::all();
返回视图('employee/index')->带有('employees',$employees,$employees->manager);
索引
{{$employee->$manager->name}
每个员工都有多个经理,因此没有所谓的$employees->manager
试试这个:
$employees = Employee:: with ('manager')->get();
return view('employee/index')->with('employees', $employees);
在这个答案中,我计算出主管
是主管的员工id
您的关系有问题,的第二个参数有许多
和belongsTo
方法需要是相关模型的外键(在本例中,是同一个模型,但引用父对象的键,如supervisor
)。检查与此主题相关的:
与hasOne方法一样,您也可以通过向hasMany方法传递附加参数来覆盖外键和本地键:
return$this->hasMany('App\Comment','foreign_key');
返回$this->hasMany('App\Comment','foreign_key','local_key');
您应该这样定义您的关系:
Employee.php
//经理有很多员工
公共职能雇员(){
返回$this->hasMany(Employee::class,'supervisor');
}
//雇员为经理工作
公共职能经理(){
返回$this->belongsTo(Employee::class,'supervisor');
}
然后在控制器中:
app/Http/Controllers/SomeCoolController.php
$employees\u with_manager=employees::with('manager')->get();
返回视图('employee/index')->带('employees',$employees\u带\u manager);
因此,在您看来,这样做就足够了:
employee/index.blade.php
@foreach($employees作为$employee)
{{$employee->manager->name}
@endforeach
您不应该使用$manager
。删除$
,使其看起来像$employee->manager->name
。感谢您的帮助,您的假设是正确的,但事实并非如此work@AlexG真奇怪。它会抛出错误吗?我还没有测试我的代码,但正如我所看到的,没有什么问题。这一个工作起来很有魅力!!令人困惑的是,yoy是如何浏览“员工”的,你只通过“$employees\u with\u manager”使用“with”表示“抱歉,我是laravelGlad的新手”来帮助你。不明白你的问题?您是指数组中视图循环的加载方式还是关系的加载方式?为了给你一个更好的答案,你忘了Employee.php belongsTo中的一个“:”,我去编辑了它,但不让我编辑