You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10 多对多关联查询仅返回1条数据问题求助

问题

在我的应用中,一个User可关联多个Company并拥有对应记录。我定义了如下关联方法:

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的store方法中,创建Company后关联当前登录用户:

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条Company数据,请问哪里出现了问题?

问题原因

你把多对多关联的外键参数顺序搞反了。Laravel的belongsToMany方法中,第三和第四个参数的规则是:

  • 第三个参数:当前模型对应的中间表外键名
  • 第四个参数:关联目标模型对应的中间表外键名

你的关联定义里,User模型的外键顺序完全写反,导致查询关联数据时,Laravel生成的SQL匹配条件错误,只能拿到不符合预期的结果。

修正方案

1. 修正User模型的关联

User模型的companies关联中,当前模型是User,所以第三个参数应为user_id(中间表对应用户的字段),第四个参数是company_id(中间表对应公司的字段):

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

2. 修正Company模型的关联

Company模型的users关联参数是正确的,无需修改,保持原样即可:

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

验证

修正之后,重新执行用户关联公司的查询(比如Auth::user()->companies),就能正确获取到所有关联的Company数据了。

内容的提问来源于stack exchange,提问作者George Dobre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:12:07