【发布时间】:2016-01-11 02:43:57
【问题描述】:
我是 laravel 的新手。我正在开发这个 laravel 5 应用程序,但我被困在这里。
我有两个雄辩的模型
class Manager extends Eloquent{
public function supervisors()
{
return $this->belongsToMany('App\Supervisor')->withTimestamps();
}
}
class Supervisor extends Eloquent {
public function managers()
{
return $this->belongsToMany('App\Manager');
}
}
经理和主管之间存在多对多关系。我遵循 laravel 5 文档并按预期创建了我的表。
例如 经理表结构
- user_id PK(来自用户表的 FK(引用 id))
- 等级
主管表结构
- user_id PK(来自用户表的 FK(引用 id))
- 卓越
数据透视表结构(manager_supervisor)
- manager_id PK(来自 Manager 表的 FK(引用 user_id))
- supervisor_id PK(来自 Supervisor 表的 FK(引用 user_id))
当我执行以下查询时,结果与预期不符
$user = App\User::find(2);
$user->supervisor->managers;
样本结果:
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'managers.id' in 'on clause' (SQL: select `managers`.*, `manager_supervisor`.`supervisor_id` as `pivot_supervisor_id`, `manager_supervisor`.`manager_id` as `pivot_manager_id` from `managers` inner join `manager_supervisor` on `managers`.`id` = `manager_supervisor`.`manager_id` where `manager_supervisor`.`supervisor_id` is null)'
我期待“on 子句”返回类似
的内容managers`.`user_id` = `manager_supervisor`.`manager_id` where `manager_supervisor`.`supervisor_id` is 2
我在这里缺少什么?真正的问题是什么?
【问题讨论】:
-
这有点棘手,因为我个人不会这样设置我的桌子。但是,Laravel 会查找名为
id的主键,因此如果您使用具有不同名称的主键,则需要在模型中设置主键:$primaryKey='user_id'; -
非常感谢@craig_h。添加变量有效。我开始在组织我的表格时遇到不必要的复杂性。它是每个类一个表的继承。你会建议我如何整理我的桌子?
标签: mysql laravel laravel-5 eloquent many-to-many