这个问题与此有关 Laravel 5 get name based on ID
以上问题解决了,效果很好。现在我正在尝试做类似但有更多关系的事情。
所以我有一个用户表
id | name | email | departmentId
-------------------------------------------------------
1 | Nick | nick@email.com | 2
-------------------------------------------------------
我还有一个客户表
id | clientName
-----------------
18 | McDonalds
-----------------
所以这些表格很简单。然后我有一个项目表
id | projectName | clientId | userId
-------------------------------------------------------
18 | Test Project | 18 | 1
-------------------------------------------------------
因此该表链接到客户端和用户表。一个项目可以有一个客户端和许多用户。所以在Project.php我有
public function client()
{
return $this->hasOne('App\Client', 'clientId');
}
public function user()
{
return $this->hasMany('App\user', 'userId');
}
然后在Client.php中
public function project()
{
return $this->belongsTo('App\Project');
}
和User.php
public function project()
{
return $this->belongsTo('App\Project');
}
所以我认为关系设置正常。我在数据库中有一些数据,但是当我尝试查看索引页面时,我收到错误。
Column not found: 1054 Unknown column 'clients.clientId' in 'where clause' (SQL: select * from `clients` where `clients`.`clientId` = 2 and `clients`.`clientId` is not null limit 1)
我的mitegations似乎有正确的名字
$table->integer('clientId')->unsigned()->default(0);
$table->foreign('clientId')->references('id')->on('clients')->onDelete('cascade');
$table->integer('userId')->unsigned()->default(0);
$table->foreign('userId')->references('id')->on('users')->onDelete('cascade');
我所显示的信息中是否有可能导致此错误的信息?或者还有什么我可以补充的吗?
由于
答案 0 :(得分:1)
实际上,根据您下面给出的projects
表,关系是相反的:
id | projectName | clientId | userId
-------------------------------------------------------
18 | Test Project | 18 | 1
-------------------------------------------------------
以上projects
表格规定为:
Client hasOne Project
User hasOne Project
Project belongsTo user
Project belongsTo Client
如果你在一个以上的项目中使用一个user_id / client_id,那么它就是hasMany。如果要执行所要求的操作,则需要更改数据库模式。为了让它听起来像这样:
Project hasOne Client (Use project_id in clients table as foreign key)
Project hasMany User (Use project_id in users table as foreign key)
希望你明白了。