我在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));
}
祝你好运, 亚尔钦
答案 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}}相匹配。希望这可以帮到你。