首页 > 解决方案 > 如何从 Laravel 上的预加载中获取嵌套数据?

问题描述

我有 Post 和 User 模型,关系如下。

User Model:
    public function posts(){
        return $this->hasMany(Post::class);
    }
Post Model:
    public function user(){
        return $this->belongsTo(User::class);
    }

下面是从 Ajax 调用的 Api 函数。

public function Api(Request $request){
    $posts = Post::with('user')->get();
    return response()->json($posts);
}

我可以将用户名和用户电子邮件从关系呈现到下表中。

    loadData().then(data => {
        let  html = ``;
        data.forEach((post,index) => 
            html += `<tr >                                        
                <td> ${post.title} </td>                                            
                <td> ${post.user['name']}</td> 
                <td> ${post.user['email']}</td> 
                <td> *num_of_post*</td> //<--need num of post here
            </tr>`
            )
        $("#table_wrapper").html(html);
    })

另外我想为每个用户呈现帖子的数量。我尝试${post.user.posts.lenght}但命令不起作用。对此的任何建议或指导将不胜感激,谢谢。

标签: laraveleloquenteager-loading

解决方案


代替:

$posts = Post::with('user')->get();

您可以使用:

$posts = Post::with(['user' => function($q) {
    $q->withCount('posts');  
}])->get();

稍后您可以像这样使用它:

<td>${post.user['posts_count']}</td>

推荐阅读