Laravel 10 多对多关系

问题描述 投票:0回答:1

所以,在我的应用程序中,用户可以拥有多家公司,他可以拥有这些公司的记录。

我已经说明了以下方法

User.php

public function companies() {
        return $this->belongsToMany(Company::class, 'companies_users', 'company_id', 'user_id');
    }

Company.php

public function users() {
        return $this->belongsToMany(User::class, 'companies_users', 'company_id', 'user_id');
    }

CompanyController我在创建时使用以下内容附加用户ID

public function store(StoreCompanyRequest $request) {
        $company = \App\Models\Company::create($request->all());
        $company->users()->attach(Auth::user()->id);
        return redirect()->route('companies.index')->with('success','Company has been created successfully.');
    }

数据透视表companies_users更新得很好

然而,当我列出或添加结果时,我只得到 1 家公司。

有人知道我做错了什么吗?

谢谢

laravel eloquent many-to-many eloquent-relationship laravel-10
1个回答
0
投票

问题是

companies
模型上的
User
关系不正确。你应该交换
user_id
company_id
的位置,它应该工作。

public function companies()
{
    return $this->belongsToMany(Company::class, 'companies_users', 'user_id', 'company_id');
}

作为一般规则,对于

belongsToMany
关系,第三个参数将具有您正在定义的模型的名称。例如,如果您正在定义
User
模型的关系,则第三个参数将为
user_id

提示

由于您的模型遵循 Laravel 命名标准,您也可以跳过第三和第四个参数,Laravel 会自行猜测。

public function companies()
{
    return $this->belongsToMany(Company::class, 'companies_users');
}
© www.soinside.com 2019 - 2024. All rights reserved.