Laravel外键关系

时间:2016-06-21 12:47:01

标签: php laravel eloquent

我有一个奇怪的问题。

我有一个用户表和一张公司表。用户属于公司,公司有很多用户。

表的两个主键都是id。

在laravel文档中,我阅读了以下内容:

  

此外,Eloquent假设外键应该有   值与父级的id列匹配。

我在CompanyModel

中有这个
protected $table = 'company';

public function users()
   {
      return $this->hasMany(UserModel::class);
   }

当我尝试这个时:

$users = CompanyModel::find(1)->users;
dd($users);

它不起作用。当我在我的关系中添加一个外键时,它可以工作!?:

protected $table = 'company';

public function users()
  {
     return $this->hasMany(UserModel::class, 'id');
  }

这很奇怪吧?我究竟做错了什么。

- 编辑 -

在我的users表中,我有一个company_id列!

1 个答案:

答案 0 :(得分:1)

首先,我建议您将模型从CompanyModel重命名为Company,将UserModel重命名为User

然后确保company_id表中有users。在users迁移文件中,将users表与companies表连接起来:


    $table->integer('company_id')->unsigned();
    $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');

不要忘记刷新数据库。

然后在您的模型中,定义关系:


    // User model
    // Laravel will automatically identify and use the `company_id` field in your reference
    public function company(){
       return $this->belongsTo(Company::class);
    }

    // Company model
    public function users(){
       return $this->hasMany(User::class);
    }

然后您可以在控制器中获取记录:


    $user = User::find(1);

    $user_company = $user->company; // This might not be necessary in your controller, you can do it in your view

    dd($users, $user_company);