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

Laravel同模型多对多关联数据如何在blade页面正确展示

你现在的代码存在3个核心错误:

  1. 模型中articles关联的中间表参数配置错误,误填为了主表articles
  2. 控制器查询逻辑错误,with()闭包仅筛选预加载的关联数据,不会限制主表返回结果,所以会拿到所有文章数据
  3. 视图遍历对象错误,你遍历的是主文章集合,不是关联的推荐文章数据

1. 修正模型关联代码

因为是同模型自关联多对多,两个关联方法分别对应正向(当前文章的推荐文章)、反向(哪些文章把当前文章设为推荐),外键顺序要对应调整:

// 反向关联:哪些文章将当前文章设为推荐
public function articles()
{
    return $this->belongsToMany('App\Models\Article', 'article_recommendations' , 'article_recommended_id' , 'article_id');
}

// 正向关联:当前文章的推荐文章列表
public function article_recommendations()
{
    return $this->belongsToMany('App\Models\Article', 'article_recommendations' , 'article_id' , 'article_recommended_id');
}

2. 修正控制器查询代码

如果你需要获取id为1的文章对应的推荐文章,直接查询该文章后获取关联数据即可:

// 先找到id为1的主文章,同时预加载关联推荐文章避免N+1问题
$article = Article::with('article_recommendations')->find(1);
// 取出推荐文章集合传给视图
$recommendations = $article->article_recommendations;
return view('你的视图名', compact('recommendations'));

如果你需要筛选「至少有1条关联推荐数据、且关联的主文章id为1」的所有推荐文章,也可以用whereHas写法:

$recommendations = Article::whereHas('articles', function($query) {
    $query->where('article_id', 1);
})->get();

3. 修正Blade视图遍历代码

直接遍历推荐文章集合即可:

@foreach($recommendations as $recommend)
    {{ $recommend->title }}
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:05