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

Posted

技术标签:

【中文标题】如何从 Laravel 上的预加载中获取嵌套数据?【英文标题】:How to get nested data from eager loading on Laravel? 【发布时间】:2021-04-03 21:23:45 【问题描述】:

我有 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 但命令不起作用。对此的任何建议或指导将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

代替:

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

你可以使用:

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

以后你可以像这样使用它:

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

【讨论】:

亲爱的 Marcin Nabiałek, 工作很棒。非常感谢。 @joenpcnpcsolution 很高兴我能提供帮助

以上是关于如何从 Laravel 上的预加载中获取嵌套数据?的主要内容,如果未能解决你的问题,请参考以下文章

三十PHP框架Laravel学习笔记——模型的预加载

如何在 Laravel 中获取嵌套关系的实例?

iPhone上的预加载数据库?

laravel 嵌套急切加载获取和第一个函数

如何在laravel中获取嵌套关系的数据

Laravel 混合获取 Eloquent 急切加载嵌套多个模型