Laravel 5与两个表

时间:2015-08-24 13:01:47

标签: laravel-5

这个问题与此有关 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');

我所显示的信息中是否有可能导致此错误的信息?或者还有什么我可以补充的吗?

由于

1 个答案:

答案 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)

希望你明白了。