Laravel :如何将Excel文件导入数据库

news2024/9/24 11:28:54

文章目录

    • 一、前提
    • 二、使用
      • 2.1、新建一个导入文件
      • 2.2、新建一个控制器和方法,调用导入文件
      • 2.3、 新建一个页面,支持文件上传

一、前提

想要将excel内容入库,laravel有扩展可以使用,常用的扩展是maatwebsite/excel,安装步骤参考上一篇:laravel中安装Maatwebsite/excel扩展

二、使用

2.1、新建一个导入文件

php artisan make:import 文件名称 --model=Model地址

在这里插入图片描述

然后在里边编写你的导入逻辑

<?php

namespace App\Imports;

use App\Exceptions\ApiException;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class QuesExport implements ToArray, WithChunkReading, WithHeadingRow
{

    public function array(array $rows)
    {
        $data = [];
        $now = date('Y-m-d H:i:s');
        foreach ($rows as $row) {

            $data[] = [
                'id' => $row['id'],
                'number' => 0,
                'parent_id' => 0,
                'type' => 1,
                'question' => $row['ques'],
                'standard_answer' => $row['answer'],
                'ai_ques_id' => $row['aiid'],
                'created_at' => $now
            ];
        }

        if (!$data) {
            throw new ApiException('没有要导入的数据');
            return false;
        };

        //全部导入
        DB::select('TRUNCATE table questions_copy1');

        DB::table('questions_copy1')->insert($data);

        return true;
    }

    public function chunkSize(): int
    {
        return 500;
    }

    public function headingRow(): int
    {
        return 1;
    }

    /**
     * @param Failure[] $failures
     */
    public function onFailure(Failure ...$failures)
    {
        // Handle the failures how you'd like.
        throw new ApiException('fhwaeurewsdf');
    }
}

2.2、新建一个控制器和方法,调用导入文件

    /**
     * 导入excel,入库
     *
     * */
    public function uploadQues(Request $request){
        $file = $request->file('file');

        // 保存上传文件
        $path = public_path('uploads/admin/ques');
        $this->mkdirs($path); // 已存在的路径不会再创建
        $fileName = date('YmdHis') . '_' . uniqid() . '_' . '.' . strtolower($file->getClientOriginalExtension());
        $file->move($path, $fileName);

        // 读取文件并入库
        Excel::import(new QuesExport(), $path . '/' . $fileName);

        // 删除上传文件
        unlink($path . '/' . $fileName);

        return response()->json([
            'status'=>1,
            'msg'=>'',
        ]);
    }

2.3、 新建一个页面,支持文件上传

我这里简单写了个页面,如下:

<!DOCTYPE html>
<html >
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Laravel</title>
    <script  src="/js/jquery-3.3.1.min.js?v=2021123999" type="text/javascript" charset="utf-8"></script>

    <meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
<div class="flex-center position-ref full-height">
    <div class="upload_box">
        <input type="file" name="file" accept="file" id="auth-upload"  onchange="uploadFile();"/>
        <div class="reload_file flex-v flex-vc flex-hc">
            <i class="icon icon_add"></i>
            <p>文件</p>
        </div>
    </div>
</div>

<script>

    function uploadFile(){
        file = $("#auth-upload")[0].files[0];

        // alert(file);
        // alert(file.name);
        // return;
        file_name = file.name;
        ext = file_name.slice(file_name.lastIndexOf(".")+1).toLowerCase();
        imgMaxSize = 1024*1024*10;
        if (ext != 'xlsx' ) {swal('文件格式不正确');return ;}
        // if (file.size > imgMaxSize) {swal('文件大小超过10M'); return ;}

        formData = new FormData();
        // 自定义formData中的内容
        formData.append('file', file);
        formData.append('_token', '{{csrf_token()}}');

        $.ajax({
            type: 'POST',
            url: "/upload",
            data: formData,
            cache: false,
            processData: false,
            contentType: false,
            dataType:'json',
            success: function (data) {
                if (data.status){
                  alert('成功');
                }else{
                    alert('失败');

                }
            }
        });
    }



</script>
</body>
</html>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FastGPT+OneAI接入网络模型

文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…

SAS:标记CRF时是否持续用ENRF还是ENRTPT?

背景&#xff1a; 在QC ACRF时发现针对是否持续有不同的标记方式&#xff0c;比如在不良事件中用AEENRF&#xff0c;在病史中用MHENRTPT&#xff0c;想知道为何会有此差别&#xff1f; 结论&#xff1a; 根据“是否持续”的时间是一个确定的时间点还是一个持续的时间段&#xf…

如何评价2023年辽宁省数学建模竞赛A题B题?

本文文章较长&#xff0c;阅读时间约为5分钟&#xff0c;点击目录条目可以快速跳转 完成进度情况 2023年辽宁省大学生数学建模竞赛A题完整论文和代码目前我已经完成了&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1推…

攻防世界 string

国际惯例file,checksec一下&#xff0c;发现是64位的elf文件&#xff0c;不可修改got表&#xff0c;栈溢出保护开启&#xff0c;nx不可执行&#xff0c;没开地址随机化 这道题的流程比较复杂&#xff0c;交互较多&#xff0c;所以我们需要先分析清楚整个流程 拖入64位ida&…

重磅!新公司法正式实施,这些变化你必须知道! ️

新公司法来了&#xff01;企业设立和经营必知的关键变动 &#x1f3db;️&#x1f680; 大家好&#xff0c;我是猫头虎&#xff0c;科技自媒体博主。今天我们来聊聊一件大事——新公司法的实施&#xff0c;这对企业设立和经营带来了哪些重大影响&#xff1f;跟着我&#xff0c…

AI视频教程下载-1小时ChatGPT提示基础课程

Hour ChatGPT Prompting Basics Course (2024) 从“玩具”到“武器” 这是一门关于ChatGPT提示的入门级课程&#xff0c;无需任何门槛或基础知识。如果你是职场专业人士&#xff0c;只想将ChatGPT作为一种工具来提高工作效率、做出决策&#xff0c;或在日常生活中提供便利和建…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十八章 借助U盘或TF卡拷贝程序到开发板上

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

06.TMS570LC43入门指南——中断操作

06.TMS570LC43入门指南——中断操作 文章目录 06.TMS570LC43入门指南——中断操作一、简介二、中断&#xff08;VIM&#xff09;介绍2.1 VIM架构2.2 CPU 中断处理2.3 VIM中断通道映射2.4 中断请求默认分配 三、项目实现3.1 硬件部分3.2 软件部分3.2.1 HALCoGen 配置3.2.2 CCS 配…

国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)

windows系统也适用&#xff0c;该插件可同时支持windows和国产系统 在实际项目开发中&#xff0c;以下场景可能会用到Word局部编辑功能&#xff1a; 合同审批公文流转策划设计报告汇签单招投标&#xff08;标书文件&#xff09;其他&#xff0c;有模板且需要不同人员协作编辑…

Ubuntu22.04安装NIVIDIA显卡驱动总结

1.首先在安装驱动时需要判断系统有无GPU以及GPU的型号 可以参考这篇文章&#xff1a; https://blog.51cto.com/u_13171517/8814753#:~:textubuntu%20%E7%B3%BB%E7%BB%9F%20%E6%80%8E%E4%B9%88%E5%88%A4%E6%96%AD%E7%B3%BB%E7%BB%9F%E6%9C%89%E6%B2%A1%E6%9C%89GPU%201%20%E6%…

2024骨传导耳机哪款值得买?健身人士说这五款骨传导耳机好~

在追求健康生活与高品质音频体验的今天&#xff0c;骨传导蓝牙耳机以其独特的魅力&#xff0c;引领了一场听觉革命。它巧妙利用骨骼传递声音&#xff0c;既保护了脆弱的耳膜&#xff0c;又带来了前所未有的佩戴自由。然而&#xff0c;在众多选择面前&#xff0c;如何慧眼识珠&a…

Python 使用proto 发送socket数据

import socket import binascii import struct from SensingMonitoring_pb2 import Command, CommandNamesif __name__ "__main__":client socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(("192.168.1.100", 22295))# 发送数据comman…

超实用调试技巧!还有用例讲解哦

文章目录 什么是bug&#xff1f;调试是什么&#xff1f;重要吗&#xff1f;2.1 调试是什么2.2 调试的基本步骤2.3 Debug和Release的介绍 3.Windows环境调试介绍3.1 调试环境的准备3.2 vs2022的快捷键3.3 调试时查看程序当前信息3.3.1 查看临时变量的值3.3.2 查看内存信息3.3.3 …

智能物联网鱼缸

硬件部分及接线图 工具 继电器、开发板、物联网os、云平台 微信小程序 结构&#xff1a;images、pages两个为主体。 标题头部分 <view class"container"> <view class"head_box"> <image src"/images/面性鱼缸.png"><…

公司裁员,为什么总是从技术人员开始?

今天聊一个让技术人员心塞的话题——公司裁员。不知道大家有没有发现&#xff0c;一到裁员的时候&#xff0c;技术人员往往就像那先被推出去的“小羊羔”。这到底是为啥呢&#xff1f;其实&#xff0c;很多时候是因为领导们的一些错误认识造成的职场乱象。 先来说说一些领导们的…

C++ 实现图书馆资料管理系统

1、问题描述 &#xff1a; 图书馆中的资料很多&#xff0c;如果能分类对其资料流通进行管理&#xff0c;将会带来很多方 便&#xff0c;因此需要有一个媒体库管理系统。 图书馆共有三大类物品资料&#xff1a;图书、视频光盘、图画。 这三类物品共同具有的属性有&#xff1a;编…

BFS:多源BFS问题

一、多源BFS简介 超级源点&#xff1a;其实就是把相应的原点一次性都丢到队列中 二、01矩阵 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:const int dx[4]{1,-1,0,0};const int dy[4]{0,0,1,-1};vector<vector<int>> updateMatrix(vector…

2024最新国际版抖音TikTok安装教程,免root免拔卡安卓+iOS,附全套安装工具!

我是阿星&#xff0c;今天给大家带来是2024年最新TikTok国际版抖音的下载和安装教程&#xff0c;而且还是免root免拔卡的那种&#xff0c;安卓和iOS都能用哦&#xff01;由于某些原因&#xff0c;国内用户并不能使用TikTok。今天阿星就教一下大家怎么安装TikTok。 TikTok在全球…

自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo

参考&#xff1a;金书世界 540度全景影像是什么 540度全景影像是在360度全景影像基础上的升级功能&#xff0c;它增加了更多的摄像头来收集周围的图像数据。通常&#xff0c;这些摄像头分布在车辆的更多位置&#xff0c;例如车顶、车底等&#xff0c;以便更全面地捕捉车辆周围…