2016-08-12 187 views
1

我通常會創建一個Repository目錄來存儲我的控制器的所有查詢。我的問題是,哪個更好用一個雄辯的模型或db :: facade?Laravel 5.2 Eloquent

通常在我的項目,我同時使用,但有時它看起來凌亂:

public function getUsersLanguagues($user_id) 
    { 
     $query = DB::table('languages as l') 
      ->select('l.name') 
      ->leftJoin('language_user as lu', 'l.id', '=', 'lu.language_id') 
      ->where('lu.user_id', $user_id) 
      ->get(); 

     return $query; 
    } 

    public function getUsersLanguagues($user_id) 
    { 
     return Languages::select('languages.name') 
      ->leftJoin('language_user as lu', 'languagues.id', '=', 'lu.language_id') 
      ->where('lu.user_id', $user_id) 
      ->get(); 
    } 

我知道他們都帶回不同種類的對象,集合,等...但我想知道這是最好的一個使用,或推薦的方式來使用。提前致謝。

+0

但是在任何一個例子中,你都沒有真正使用過雄辯,至少不是你試圖讓它們看起來不同。無論如何,您只是使用該模型,然後將查詢構建器應用到其實例的返回。 – Ohgodwhy

+1

我認爲他需要比較雄辯vs查詢構建器。在我看來,Eloquent ORM給了你很多「魔力」,但是當有複雜的查詢時,例如全文搜索查詢,那麼你將需要爲你自己建立一個查詢。而且,對於這方面的表現,可讀性......還有一些比較,你應該看看它們。 – haitran

回答

1

在提供的示例中沒有看到有顯着差異。最後,你只需要使用Database's Query BuilderEloquent's Query Builder這些共享很多特徵。實際上,Eloquent在其許多方法中注入了數據庫的查詢生成器。

Laravel 5.2 official documentation

每個洋洋灑灑模型作爲一個強大的查詢生成器,讓您流暢查詢與模型相關聯的數據庫表的思考。


我認爲它們之間的最significants的區別之一,就是你可以用雄辯帶來從關係數據的方式:

# An example adapted to your needs 
LanguagesUsers::where('user_id', $user_id)->first()->languages 

同樣可以通過這種方式來實現,如果你喜歡:

# languages_users is the name you may give to your relation in your model 
Languages::whereHas('languages_users', function ($query) { 
    $query->where('user_id', $user_id); 
})->get(); 

所以,至少從我的角度來看,Eloquent比加入更具有表達性。

這只是我看到的更重要的差異,但有很多好的東西Eloquent提供了比較簡單的數據庫的查詢生成器。爲此,我建議你儘可能地使用雄辯。


作爲最後的評論,發現自laravel 5.3,數據庫的Query Builder will return collections,同樣與口才。所以這不會再有區別了。

+0

感謝您的回覆,在laravel 5.3上不知道,查詢生成器返回集合,肯定會遷移,再次感謝。 – Carlos