Laravel(Eloquent)相当于Mongoose的populate()方法

时间:2017-12-05 11:21:59

标签: javascript php laravel mongoose eloquent

据我所知,这个问题可能有多个与DBMS相关的答案,但可能没有,所以就这样了。

所以,我需要我的应用程序从后端异步获取一些数据,比如User和他的Posts。我在前端使用Vue2和Axios,所以写下这样的东西会很好:

mounted: function() {
    axios.get('/users')
        .then((response) => {
            this.users = response.data;
        })
        .catch(function (err) {
            // Handle this
        });
}

我希望得到的结果是,我的VueVM数据中的users对象还包含每个posts的{​​{1}}数组。目前我在后端控制器中构建一个自定义关联数组,如下所示:

User

或者,在可行的情况下,我使用$posts = Post::where('user_id', $id)->get(); return json_encode(['user' => $user, 'posts' => $posts]); 方法,这也非常方便,但我发现这个解决方案非常难看并且缺乏可重用性。

使用Mongoose和MongoDB,我会使用has_many方法,但我找不到(我实际上不知道如何搜索它)与Eloquent等效。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您在用户模型中定义了posts()关系,则在检索用户时,您可以急切加载相关数据:

$users = User::with('posts')->get();

或特定用户:

$user = User::with('posts')->find($id);

然后$user->posts将包含相关Post模型的集合。

我建议您通读https://laravel.com/docs/5.5/eloquent-relationships