我在Laravel中使用的Controller中编写了一个函数。该函数获取*.csv文件的文件路径,然后使用原始批量insert语句将该*.csv文件的所有元素插入数据库。问题是在执行函数时,这些元素没有放在数据库表中。我也没有任何错误。当我在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));
}向你问好,Yalcin
发布于 2016-12-07 18:28:42
我喜欢使用laravel-excel库来处理我的CSV文件,它使我更容易管理,而且对我来说感觉更像“laravel”。
laravel/excel图书馆: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()方法假设您在TestTable模型上定义了protected $fillable = [];属性。column names来自您的testTable与column names从您的csvfile。希望这能帮到你。
https://stackoverflow.com/questions/41022158
复制相似问题