【问题标题】:Laravel 5 relationships with two tablesLaravel 5 与两个表的关系
【发布时间】:2015-08-24 13:01:46
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: laravel-5


    【解决方案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)
    

    希望你明白了。

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多