2014-02-22 97 views
1

我有一个快速和直接的问题。在Laravel使用Eloquent ORM时,以下哪个查询是首选的?Eager Loading Laravel Eloquent

$post = Post::with(array('user', 'comments.from'))->find($id); 
$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get(); 

我正在努力寻找 - >查找和 - >以急切加载得到的区别。

postID是我在上面posts表中的主键。通过我的调试器,两种性能几乎相同,每次运行8次查询。

如果有人能说出这些,我会很感激。

回答

3
  1. 这是你应该使用的;它会返回一个结果模型:

    $post = Post::with(array('user', 'comments.from'))->find($id); 
    
  2. 这将返回的结果集(哪怕只有一个):

    $post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get(); 
    
  3. 代替方法2,你大概的意思做的是这样的:

    $post = Post::with(array('user', 'comments.from'))->where('postID', $id)->first(); 
    

方法1和3将基本得到你完全相同的结果。方法1更具适应性,因为如果您更改表的主键,它将继续工作。它比其他两种方法更快,因为它不构建模型集合。

顺便说一下,这与急切加载无关,因为这些函数在任何查询中都会起作用。

+0

这甚至被认为是急于加载? – user1011713

+0

@ user1011713几乎没有大声笑。 with()和load()用于在Laravel中进行急切加载,但在这种情况下,您只是使用它们将更多信息加载到模型中。如果你实际上得到了一系列模型,比如Post :: with('comments') - > get()来获得你的所有帖子和他们的评论,那么它将被视为急切加载,因为你正在检索所有的只有2个查询的数据,而不是n + 1个查询。 – TonyArra

+0

任何想法如何我可以热切加载关系? – user1011713