Mar*_*leu 3 php convention laravel laravel-5 laravel-5.1
在研究Database Seeder时,人们常常看到人们DB::table('my_table')->insert(['column' => 'value'])
在Seeder课程中使用.我想知道这个明显的约定背后的原因,为什么我应该使用DB::*
而不是MyModel::*
执行这样的任务.
最重要的是,因为使用DB
插入,您可以一次执行多个插入.特别是当播种许多大型表时,这比每次插入一次查询要快得多.
http://laravel.com/docs/master/queries#inserts
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
Run Code Online (Sandbox Code Playgroud)
您也不需要加载Eloquent类或随附的任何批量.再次,播种数千行,创建数以千计的Eloquent对象......这可能占用大量内存.
最后,如果确实发生了Eloquent模型的错误或问题,您的种子仍将有效.
有一些缺点.例如,如果您的一个Eloquent模型在保存之前覆盖了一个setter来操作和格式化数据,那么您将失去这种便利.
实际上,这适用于任何带有$ timestamps的模型; 使用DB
插入,您必须手动设置created_at
和updated_at
时间戳.但是使用播种机,您可能希望模拟项目是在几天或几个月或几年前创建的,在这种情况下,您不希望自动设置这些时间戳.
但实际上,很多人都使用模型工厂.如果你确实想要使用你的setter,或者自动分配关系,并且基本上利用了Eloquent提供的所有东西,那么它们非常适合用于播种.通过我提到的效率权衡,但有时这是值得的.
归档时间: |
|
查看次数: |
1779 次 |
最近记录: |