Laravel通过中间表关联查询:Site模型关联News表的正确配置
解决Site模型关联News的hasManyThrough配置问题
你当前的hasManyThrough参数配置完全错误,这就是返回计数为0的原因。
根据你的表结构:
- sites(主表)和listings的关联:listings表用
sites_id关联sites的主键 - listings和news的关联:news表用
listing_id关联listings的主键
正确的Site模型关联方法应该这么写:
public function news() { return $this->hasManyThrough( News::class, Listing::class, 'sites_id', // listings表中关联sites的外键 'listing_id', // news表中关联listings的外键 'id', // sites表的主键 'id' // listings表的主键 ); }
参数对应逻辑:
- 前两个参数依次是最终要关联的模型和中间过渡的模型
- 第三个参数是中间表(listings)指向主表(sites)的外键
- 第四个参数是目标表(news)指向中间表(listings)的外键
- 最后两个参数分别是主表和中间表的主键(如果是默认的
id可以省略,但显式写出更清晰)
改完之后,再执行$news = $site->news()->count();就能正确获取该站点关联的所有新闻数量了。
内容的提问来源于stack exchange,提问作者Iyti
相关产品推荐
相关产品推荐

