如何通过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); }
另外注意:你之前代码里用的<和>会把HTML标签转义成文本,直接换成<和>就好,不然页面上只会显示<tr>这样的字符串,而不是实际的表格行。
额外检查点
- 确认posts表的
user_id字段确实关联了users表的id字段,且数据库中每篇文章都有对应的有效user_id值; - 前端传参的参数名是
class,后端用request('class')接收是正确的,如果参数名不匹配,会导致查询不到对应主题的文章。
这样调整之后,前端就能正确获取并显示文章作者的user_name啦!
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

