我知道为什么很多人在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),因为我通常知道我想要什么。