Laravel多模型关联问题:无法获取赛事对应的所有博彩商
解决Laravel多对多关联获取数据的问题
嘿,好久不用Laravel确实容易忘关联关系的细节~你现在的问题出在多对多关联的定义错误上,咱们一步步来修正:
问题分析
你的数据库结构是典型的多对多关联:
leagues(赛事表)和bookmakers(博彩商表)通过中间表league_bookmakers关联- 你当前在
League模型里用了hasMany(LeagueBookmaker::class),这只能获取到中间表的记录,而不是你需要的博彩商数据
修正模型关联
把League模型里的bookmakers()方法改成多对多关联的正确写法:
public function bookmakers() { // 参数说明: // 1. 关联的目标模型类 // 2. 中间表名称 // 3. 当前模型在中间表的外键字段 // 4. 关联模型在中间表的外键字段 return $this->belongsToMany(Bookmaker::class, 'league_bookmakers', 'league_id', 'bookmaker_id'); }
修正控制器调用
另外要注意:控制器里的$example->bookmakers()调用的是关联查询构建器,不是实际数据。要获取博彩商列表,有两种方式:
$example = \App\League::find(440); // 方式1:属性访问(Laravel会自动执行查询并返回集合) dd($example->bookmakers); // 方式2:手动调用get()执行查询 dd($example->bookmakers()->get());
这样就能正确获取到赛事440对应的所有博彩商啦~
内容的提问来源于stack exchange,提问作者Pedro




