首页 > 解决方案 > 有没有办法在 laravel 连接中获取所有相关数据?

问题描述

我有两个名为postsand的表categories。这两个表具有一对多的关系,我将它们写在这样的模型中:

class Post extends Model
{
    ...
    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id', 'id');
    }
    ...
}
class Category extends Model
{

    ...
    public function posts()
    {
        return $this->hasMany(Post::class, 'category_id', 'id');
    }
    ...
}

当我$post = Post::find($id)在控制器中使用并检索一篇帖子并用于$post->category获取该帖子的类别时,这可以正常工作。但是如果我想一起检索所有帖子及其类别怎么办?我的意思是,假设我在数据库中有 10 个帖子,我必须$posts = Post::get();获取所有帖子。现在,我如何获得每个帖子的类别?一种方法是循环!例如:

foreach($posts as $post) {
    $post['category'] = $post->category;
}

return response()->json($posts);

是的!我想用 Json 回复,我之前忘了说,对不起。

有没有更好的方法来做到这一点?我搜索了,但我的搜索一无所获。如果有人回答我的问题,我将不胜感激。:)

标签: phplaraveleloquent

解决方案


使用 json 在每个帖子模型中包含类别的最简单方法是简单地包含它with(),它会自动转换它。

return Post::with('category')->get();

Laravel您不必在其中包装模型或集合时,response->json();它会自动执行此操作。


推荐阅读