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

如何通过jQuery Ajax从Laravel返回含关联用户信息的完整模型?

嘿,这个问题很明显啦——你的Laravel查询只拉取了Post表的数据,没有带上关联的User模型信息,所以前端自然拿不到作者名字,才会显示undefined。咱们一步步来解决:

1. 修正Laravel后端的查询逻辑

首先,确保你的Post模型已经正确定义了和User的一对一关联(假设Post属于User,posts表有user_id字段关联users表的id):

// app/Post.php
namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Post extends Model
{
    // 定义与User模型的关联关系
    public function user()
    {
        // 如果posts表的外键不是默认的user_id,需要在第二个参数指定,比如return $this->belongsTo(User::class, '自定义外键名');
        return $this->belongsTo(User::class);
    }
}

然后修改控制器里的查询代码,使用with()预加载关联的User数据,同时动态接收前端传过来的主题参数(你前端传的参数名是class,所以用request('class')获取):

return \App\Post::where('post_topic', request('class'))
    // 只加载User模型中需要的user_name字段(带上id是因为belongsTo关联需要主键匹配)
    ->with('user:id,user_name')
    // 只选择Post表中需要的字段,避免返回冗余数据
    ->select('id', 'post_title', 'post_body', 'user_id')
    ->get();

2. 修正前端的取值逻辑

现在后端返回的每个Post对象里会包含一个user子对象,里面有user_name字段,你需要调整前端循环代码,从正确的路径取值,而不是不存在的post_owner:

success: function( data ) {
    console.log(data);
    var htmlText = '';
    for ( var key in data ) {
        htmlText += '<tr>';
        htmlText += '<td class="">' + data[key].post_title + '</td>';
        htmlText += '<td class="">' + data[key].post_body + '</td>';
        // 加个判断,防止关联用户不存在时出现报错
        htmlText += '<td class="">' + (data[key].user ? data[key].user.user_name : '未知作者') + '</td>';
        htmlText += '</tr>';
    }
    $('#post_list').html(htmlText);
}

另外注意:你之前代码里用的&lt;和&gt;会把HTML标签转义成文本,直接换成<和>就好,不然页面上只会显示<tr>这样的字符串,而不是实际的表格行。

额外检查点

  • 确认posts表的user_id字段确实关联了users表的id字段,且数据库中每篇文章都有对应的有效user_id值;
  • 前端传参的参数名是class,后端用request('class')接收是正确的,如果参数名不匹配,会导致查询不到对应主题的文章。

这样调整之后,前端就能正确获取并显示文章作者的user_name啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:21