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

Laravel一对多关联返回数据控制台可见但Vue页面不渲染问题

问题原因

  1. 接口返回结构与前端取值逻辑不匹配:后端接口返回的JSON外层套了sessions字段,结构为{"sessions": [Session数据列表]},但前端直接将response.data赋值给sessions变量,此时变量内没有你要遍历的列表数据。
  2. 分页逻辑不对应:后端查询用的是get()方法,返回的是普通集合数组,没有分页对象的data字段,前端模板遍历sessions.data自然取不到值。
  3. 初始值类型错误:data中sessions初始化为空对象,遍历非数组类型会导致渲染异常。

解决方案

方案1:不需要分页,直接展示全部数据

  1. 后端接口调整(可选,也可以只改前端适配):
public function allWithPeriods()
{
    $sessions = Session::orderBy('end_date', 'desc')
        ->with('_periods')
        ->get();
    // 直接返回集合,不需要外层套sessions字段
    return $sessions;
}
  1. 前端修改:
// data里将sessions初始化为空数组
data() {
    return {
        url: document.head.querySelector('meta[name="url"]').content,
        sessions: [],
    }
},
<!-- 模板里直接遍历sessions,去掉.data -->
<tbody v-for="session in sessions" :key="session.id">

如果不修改后端返回结构,只需要把axios赋值逻辑改成this.sessions = response.data.sessions即可。

方案2:保留分页功能

  1. 后端接口调整为分页查询:
public function allWithPeriods()
{
    $sessions = Session::orderBy('end_date', 'desc')
        ->with('_periods')
        // 自定义每页条数
        ->paginate(10);
    return $sessions;
}
  1. 前端axios赋值逻辑调整:
    如果后端返回没有外层sessions字段,直接保留原有赋值逻辑即可;如果保留外层字段,就修改为this.sessions = response.data.sessions。

如果需要展示关联的Period数据,直接在模板中通过session._periods取值遍历即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:57:02