use DB::table() or Model::all() Laravel's Eloquent


use DB::table() or Model::all() Laravel's Eloquent

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

问候

您可以这样做,因为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,还可以为它提供事件、关系信息、特定的静态绑定以及其他一些方便的助手,这些助手可以约束对象,使面向对象编程更容易。

因此,是的,您可以使用一个模型,然后使用查询生成器对象并更改其表(就像您可以更改生成器的其他任何内容一样),但它正在与一个专门设计用于简化查询构建的系统作斗争。

从本质上讲,Laravel所做的是采用Symfony2框架并对其进行精简,使一切都更简单。模型就是这样一个例子。

来自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),因为我通常知道我想要什么。