laravel-admin / Dcat admin 上传Excel并导入数据到数据库
准备工作
安装maatwebsite/excel
composer require maatwebsite/excel
laravel-admin
效果图
- 创建按钮
$grid->tools(function (Grid\Tools $tools) {// excle 导入$tools->append(new ExcelAdd());
});
2.创建按钮文件
<?phpnamespace App\Admin\Actions;use Throwable;
use Encore\Admin\Admin;
use App\Imports\DataExcel;
use Encore\Admin\Actions\Action;
use Encore\Admin\Actions\Response;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Validators\ValidationException;class ExcelAdd extends Action
{protected $selector = '.import-template';public function handle(){try {Excel::import(new DataExcel(time()), request()->file('file'));} catch (ValidationException $validationException) {return Response::withException($validationException);} catch (Throwable $throwable) {$this->response()->status = false;return $this->response()->swal()->error($throwable->getMessage());}return $this->response()->success('上传成功')->refresh();}// 按钮样式public function html(){return <<<HTML<a class="btn btn-sm btn-default import-template">上传简历</a>
HTML;}// 上传表单public function form(){$this->file('file', '上传简历')->rules('required', ['required' => '文件不能为空']);}/*** @return string* 上传效果*/public function handleActionPromise(){$resolve = <<<'SCRIPT'
var actionResolverss = function (data) {$('.modal-footer').show()$('.tips').remove()var response = data[0];var target = data[1];if (typeof response !== 'object') {return $.admin.swal({type: 'error', title: 'Oops!'});}var then = function (then) {if (then.action == 'refresh') {$.admin.reload();}if (then.action == 'download') {window.open(then.value, '_blank');}if (then.action == 'redirect') {$.admin.redirect(then.value);}};if (typeof response.html === 'string') {target.html(response.html);}if (typeof response.swal === 'object') {$.admin.swal(response.swal);}if (typeof response.toastr === 'object') {$.admin.toastr[response.toastr.type](response.toastr.content, '', response.toastr.options);}if (response.then) {then(response.then);}};var actionCatcherss = function (request) {$('.modal-footer').show()$('.tips').remove()if (request && typeof request.responseJSON === 'object') {$.admin.toastr.error(request.responseJSON.message, '', {positionClass:"toast-bottom-center", timeOut: 10000}).css("width","500px")}};
SCRIPT;Admin::script($resolve);return <<<'SCRIPT'$('.modal-footer').hide()let html = `<div class='tips' style='color: red;font-size: 18px;'>导入时间取决于数据量,请耐心等待结果不要关闭窗口!<img src="data:image/gif;base64,R0lGODlhEAAQAPQAAP///1VVVfr6+np6eqysrFhYWG5ubuPj48TExGNjY6Ojo5iYmOzs7Lq6utjY2ISEhI6OjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA=="><\/div>`$('.modal-header').append(html)
process.then(actionResolverss).catch(actionCatcherss);
SCRIPT;}
}
3、获取 excel 中第一个 文件 sheet 中的信息
<?phpnamespace App\Imports;use Maatwebsite\Excel\Concerns\WithMultipleSheets;class DataExcel implements WithMultipleSheets
{private $round;public function __construct(int $round){$this->round = $round;}public function sheets(): array{return [new FirstSheetImport($this->round),];}
}
4、获取信息进行导入数据库
<?phpnamespace App\Imports;use App\Models\Data;
use App\Models\Data as DataModel;
use Illuminate\Support\Collection;
use Illuminate\Database\Eloquent\Model;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;HeadingRowFormatter::default('none');class FirstSheetImport implements ToCollection, WithBatchInserts, WithChunkReading, WithHeadingRow, ToModel
{private $round;public function __construct(int $round){$this->round = $round;}/*** @param array $row** @return Model|Model[]|null*/public function model(array $row){// 断数据是否$user = Data::where('mobile', '=', $row['手机'])->first();if ($user) {// 存在返回 nullreturn null;}// 数据库对应的字段return new DataModel(['name' => $row['姓名'],'gender' => $row['性别'],]);}public function collection(Collection $rows){//}//批量导入1000条public function batchSize(): int{return 1000;}//以1000条数据基准切割数据public function chunkSize(): int{return 1000;}
}
注意需要在models加上
protected $fillable = ['img', 'content','static','username'];
这段来源
Dcat admin
Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具,只需极少的代码即可快速构建出一个功能完善的高颜值后台系统。支持页面一键生成CURD代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。
效果图
- 创建按钮
$grid->tools(function (Grid\Tools $tools) {// excle 导入$tools->append(new Reast());});
2.app/admin/actions/grid 下创建 Reast.php
<?phpnamespace App\Admin\Actions\Grid;use App\Admin\Actions\Form\Import;
use Dcat\Admin\Admin;
use Dcat\Admin\Actions\Response;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Dcat\Admin\Traits\HasPermissions;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;class Reast extends AbstractTool
{/*** @return string*/protected $title = 'Title';public function render(){$id = "reset-pwd-{$this->getKey()}";// 模态窗$this->modal($id);return <<<HTML
<span class="grid-expand" data-toggle="modal" data-target="#{$id}"><a href="javascript:void(0)"><button class="btn btn-outline-info ">上传Excel并导入数据</button></a>
</span>
HTML;}protected function modal($id){$form = new Import();Admin::script('Dcat.onPjaxComplete(function () {$(".modal-backdrop").remove();$("body").removeClass("modal-open");}, true)');// 通过 Admin::html 方法设置模态窗HTMLAdmin::html(<<<HTML
<div class="modal fade" id="{$id}"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><h4 class="modal-title">导入数据</h4><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button></div><div class="modal-body">{$form->render()}</div></div></div>
</div>
HTML);}/*** @param Model|Authenticatable|HasPermissions|null $user** @return bool*/protected function authorize($user): bool{return true;}/*** @return array*/protected function parameters(){return [];}
}
3.在Actions/form下创建Import.php
<?phpnamespace App\Admin\Actions\Form;
use Dcat\Admin\Models\Administrator;
use Dcat\Admin\Widgets\Form;
use Symfony\Component\HttpFoundation\Response;
use App\Imports\DataExcel;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Validators\ValidationException;class Import extends Form
{public function handle(array $input){$file = env('APP_URL').'/upload/'.$input['file'];try {Excel::import(new DataExcel(time()), $input['file'],'public');//dcat-2.0版本写法return $this->response()->success('导入成功')->redirect('/');//dcat-1.7//return $this->success('导入成功');} catch (ValidationException $validationException) {return Response::withException($validationException);} catch (Throwable $throwable) {//dcat 2.0写法$this->response()->status = false;return $this->response()->error('上传失败')->refresh();//dcat 1.7//return $this->error('上传失败')->refresh();}}public function form(){$this->file('file', '上传数据(Excel)')->rules('required', ['required' => '文件不能为空']);}}
再重复上一标题下的3.4方法
laravel-admin / Dcat admin 上传Excel并导入数据到数据库相关推荐
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库
前台代码,有点简单: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server&q ...
- VFPBS上传EXCEL并保存MSSQL到数据库中
开发环境 后端:VFP SP2 7423 +祺佑三层开发框架(猫框) 前端:VUE2.0+Element 思路 实现BS上传 就是利用猫框的importexcel类将EXCEL文件转换为临时表, 将临 ...
- 通过java将Excel表格导入数据到数据库
文章目录 一.首先.我们使用到的是apache的开源框架<poi> excel导入数据到数据库原理. demo案例:(内附注释) 实体类 数据导入解析工具类 实例业务接口如下 一.首先.我 ...
- flask 上传 excel 并导入mysql
参考: flask 文件的上传下载和excel操作 Python 将Excel表格数据导入MySQL数据库
- 【总结】C#上传excel文件到Sql server数据库
工具 : VS2015 + SQL Server 2008 R2 框架:三层+一般处理程序 方法:方法很多种,百度千奇百怪,总结下来更好更快的方法,以下会提到 最近接触到需要实现将一个excel表格 ...
- iview upload组件手动控制上传,excel表格导入
iview upload组件手动控制上传,这里我只需要将文件的file传给后端用来做excel表格的导入,所以用不到upload-success回调,也用不到action (iview 有提供exce ...
- 上传excel表格批量插入到数据库
前因 最近在做的项目是在线考核平台(目前已经在测试阶段),里面涉及到的业务复杂度很深(公司项目,不便多说),业务逻辑和需求契合度也很高,在开发过程中就遇到了很多很多的问题. 我的计划是在开发结束后把自 ...
最新文章
- 《预训练周刊》第13期:CPM-2:大规模经济高效的预训练语言模型、变换器作为编程语言...
- es6学习---.babelrc文件
- 汇编语言 pushf 和 popf指令
- 每天都在红绿灯前面梭行,不如自己来实现个红绿灯?
- 配置gitlab通过smtp发送邮件
- 服务器磁盘扩展容量操作流程
- MyEclipse下连接Mysql
- ASP.NET Core默认注入方式下如何注入多个实现(多种方式)
- android定时切换活动,安卓手机如何定时自动切换情景模式 (全文)
- 《数据结构》C语言版(清华严蔚敏考研版) 全书知识梳理 + 练习习题详解(超详细清晰易懂)
- Wpf 初学---01设计一个优美的注册界面
- 关于JSZIP压缩图片打包下载的一些用法
- 利用Aliddns进行端口映射,外网可以使用域名访问,在公司内网用域名访问不通。
- 张一鸣宣布卸任字节跳动CEO,去学习承担社会责任
- 在html中怎样加圆点,css伪类-小圆点
- 12c 新特性-统一审计(Unified Auditing)
- 获取自己win10系统的产品密匙
- python 悬浮窗_python浮窗
- Elasticsearch 之(20)proximity match 近似匹配
- 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...