如何从 Laravel 上的预加载获取嵌套数据?

How to get nested data from eager loading on 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);
}

我可以将关系中的用户名和用户电子邮件呈现为 table,如下所示。

    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。我尝试 ${post.user.posts.lenght} 但命令不起作用。如有任何建议或指导,我们将不胜感激,谢谢。

而不是:

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

您可以使用:

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

以后你可以这样使用它:

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