使用DB :: table()或Model :: all()Laravel的Eloquent

时间:2016-07-22 09:53:16

标签: php laravel laravel-5 model eloquent

我知道为什么很多人在Laravel项目中使用$users = DB::table('users')->get();代替$users = Users::all();?是什么原因?

此致

2 个答案:

答案 0 :(得分:4)

您可以这样做,因为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

不同之处在于,Model的实例具有使用预先指定的信息(如表)建立Builder的属性,并且还为其提供事件,关系信息,特定的静态绑定以及一系列约束对象的方便助手。使面向对象的编程更容易。

所以,是的,您可以使用模型,然后获取查询Builder对象并更改其表(就像您可以更改有关Builder的任何其他内容),但它正在与专门设计用于进行查询构建的系统进行斗争更容易。

从本质上讲,Laravel所做的就是采用Symfony2框架并简化它,以便一切都更简单。模型就是这样的一个例子。

答案 1 :(得分:2)

来自Laravel

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

所以all()调用get()并返回它的内容以及query()和file()$ _FILES超全局。

偏好显然取决于环境。我个人选择使用Input :: get($ key,$ default),因为我通常知道自己在追求什么。