2014-02-22 101 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