Php 通过Laravel中的一个查询获得雄辩的模型及其所有关系 问题

Php 通过Laravel中的一个查询获得雄辩的模型及其所有关系 问题,php,laravel,eloquent,Php,Laravel,Eloquent,有没有一种方法可以只使用一个查询就得到一个雄辩的模型和它的所有关系 示例场景: 您既有Post又有Comment雄辩的模型。 您可以分别使用hasMany('Comment')和belongsTo('Post')在模型类中添加它们的关系 现在我正在做的就是检索帖子及其评论: $post = Post::find($id); $post->comments; return $post; 这将返回一个漂亮的json对象。问题是,这样,我将使用两个查询。那不太好 变通办法 我想到了两种选择:

有没有一种方法可以只使用一个查询就得到一个雄辩的模型和它的所有关系

示例场景: 您既有
Post
又有
Comment
雄辩的模型。
您可以分别使用
hasMany('Comment')
belongsTo('Post')
在模型类中添加它们的关系

现在我正在做的就是检索帖子及其评论:

$post = Post::find($id);
$post->comments;
return $post;
这将返回一个漂亮的
json
对象。问题是,这样,我将使用两个查询。那不太好

变通办法 我想到了两种选择:

  • 使用
    join
    语句进行我想要的查询。但雄辩要优雅得多
  • 利用Cache类,以便在将来进行更少的查询(这一点,我稍后将做)

有什么想法吗?

在雄辩中,你可以这样做

$post = Post::with('comments')->find($id);
return $post;
编辑:
这不会在mysql中使用join运行查询,但在Eloquent中只是一个查询。

简单回答“否”。这就是雄辩的工作方式:(我担心会是这样。绝对确定,Mark?我没有遇到任何方法可以做到这一点,但是通过连接处理关系会增加难以置信的复杂性,将基于连接的查询返回的“平面”结果解析回“形状”查询中由多个查询返回的模型……我深入研究了querybuilder代码,发现在“基于连接的查询”方面没有任何东西与您完全一致问题。感谢您的帮助。如果需要,只需缓存,并确保在数据库上设置了正确的索引,以便更快地进行选择。老实说,两个查询并没有那么糟糕。您可以非常轻松地利用缓存:
Post::memory(10)->find($id);
将缓存结果10分钟。一个查询如何在没有连接的情况下获取相关记录?我试过了,它实际上运行了两个mysql查询,所以我看不出它有多好。