首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel生料散装插入

问Laravel生料散装插入
EN

Stack Overflow用户
提问于 2016-12-07 16:10:26
回答 1查看 1.2K关注 0票数 0

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

下面是函数的代码:

代码语言:javascript
复制
        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

EN

回答 1

Stack Overflow用户

发布于 2016-12-07 18:28:42

我喜欢使用laravel-excel库来处理我的CSV文件,它使我更容易管理,而且对我来说感觉更像“laravel”。

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

然后你会做一些简单的事情:

代码语言:javascript
复制
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。

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41022158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档