You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动