2016-07-22 69 views
2

我想知道爲什麼很多人在Laravel項目中使用$users = DB::table('users')->get();而不是$users = Users::all();?什麼是理由?使用DB :: table()或Model :: all()Laravel的Eloquent

問候

+1

個人喜好? –

+0

有些人不使用模型,因爲它並不真正瞭解MVC,但使用模型更清晰。有時你必須直接查詢表格。 – Vuldo

+0

Eloquent是查詢生成器上的另一個層。您可以使用構建器進行復雜的查詢。但你的例子是一樣的,這裏是一個速度差異的基準:https://blog.sriraman.in/laravel-eloquent-vs-fluent-query-builder/ – Iamzozo

回答

3

你可以這樣做,因爲Model和DB facade都實現了產生Builder實例的函數。

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html

https://laravel.com/api/5.2/Illuminate/Database/Query/Builder.html

不同的是,模型的實例有其中設置了預先指定的信息的生成器,如表屬性,也爲它提供的事件,關係信息,特定靜態綁定,和一些其他方便的助手,這些助手限制對象並使面向對象編程更容易。

所以是的,你可以使用一個模型,然後使用查詢生成器對象並更改它的表格(就像你可以更改關於生成器的其他任何東西一樣),但是它正在與專門設計用於使查詢構建更容易的系統作鬥爭。

Laravel的核心是採用Symfony2框架並簡化它,所以一切都比較簡單。模型就是這樣一個例子。

1

從Laravel

public static function all() 
{ 
    $input = array_merge(static::get(), static::query(), static::file()); 
    // .... 
    return $input; 
} 

因此,所有的()調用get()並返回它的內容與查詢(一起)和文件()的$ _FILES超級全局。

偏好顯然取決於環境。我個人選擇使用Input :: get($ key,$ default),因爲我通常知道我在做什麼。