未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”
Posted
技术标签:
【中文标题】未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”【英文标题】:Column not found: 1054 Unknown column 'managers.id' in 'on clause' in Laravel 5 Many-to-Many relationship query 【发布时间】: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。添加变量有效。我开始在组织我的表格时遇到不必要的复杂性。它是每个类一个表的继承。你会建议我如何整理我的桌子?
【参考方案1】:
我需要做的就是在两个模型中设置一个主变量:
class Manager extends Eloquent
protected $primaryKey = 'user_id';
public function supervisors()
return $this->belongsToMany('App\Supervisor')->withTimestamps();
class Supervisor extends Eloquent
protected $primaryKey = 'user_id';
public function managers()
return $this->belongsToMany('App\Manager');
【讨论】:
以上是关于未找到列:Laravel 5 多对多关系查询中“on 子句”中的 1054 未知列“managers.id”的主要内容,如果未能解决你的问题,请参考以下文章