Laravel Raw Bulk插入

时间:2016-12-07 16:10:26

标签: php laravel laravel-5 laravel-5.2

我在Laravel框架中使用的Controller中编写了一个函数。该函数获取* .csv文件的文件路径,然后将此* .csv文件的所有元素与原始批量插入语句一起插入到数据库中。问题是执行函数时元素不会放在数据库表中。我也没有任何错误。当我在SQL Server管理器中执行查询时,它会毫无问题地插入元素。我做错了什么,是否有更好的方法将csv文件的元素批量插入数据库?

以下是该函数的代码:

        public static function bulkInsertCSV($filePath){

            $sql = "use [testDatabase] BULK INSERT [dbo].[testTable]   
                    FROM '" . $filePath . "' WITH (FIELDTERMINATOR = ';',"
                    . "ROWTERMINATOR = '\\n' );";
            //DB::statement($sql);
            DB::statement(DB::raw($sql));
        }

祝你好运, 亚尔钦

1 个答案:

答案 0 :(得分:0)

我喜欢使用laravel-excel库来处理我的CSV文件,它使管理更容易,感觉更多" laravel-y"对我来说。

laravel/excel lbirary:http://www.maatwebsite.nl/laravel-excel/docs/getting-started#installation图书馆。

你做的事情有点简单:

Excel::filter('chunk')->load($filePath)->chunk(500, function($rows){
    foreach($rows as $row) {
        $data = collect([]);
        foreach(App\TestTable::getFillable() as $fillable ) {
            if (isset($row[$fillable])) {
               $data->put($fillable, $row[$fillable]);
            }
        }

        App\TestTable::create($data->toArray());
    }
});

注意:

  • 使用chunk可确保我们不会耗尽内存。
  • getFillable()方法假设您在protected $fillable = [];模型上定义了TestTable属性。
  • column names中的testTable与您column names的{​​{1}}相匹配。

希望这可以帮到你。