Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值

举报
lxw1844912514 发表于 2022/03/28 01:30:02 2022/03/28
3.6k+ 0 0
【摘要】 <?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs;use Illuminate\Routing\Controller as BaseController;use Illuminate\Foundatio...

        <?php
        namespace App\Http\Controllers;
        use Illuminate\Foundation\Bus\DispatchesJobs;
        use Illuminate\Routing\Controller as BaseController;
        use Illuminate\Foundation\Validation\ValidatesRequests;
        use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
        use Illuminate\Support\Facades\Input;
        use Maatwebsite\Excel\Facades\Excel;
        use Illuminate\Database\Schema\Blueprint;
        use Illuminate\Support\Facades\Schema;
        use Illuminate\Support\Facades\DB;
        class QueryController extends BaseController
        {
           use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
       	public function index(){
       		$file = Input::file('myfile');
       		if($file){
        // $realPath = $file
        // $path = $file -> move(app_path().'/storage/uploads');
       			$realPath = $file->getRealPath();
       			$entension =  $file -> getClientOriginalExtension(); //上传文件的后缀.
       			$tabl_name = date('YmdHis').mt_rand(100,999);
       			$newName = $tabl_name.'.'.'xls';//$entension;
       			$path = $file->move(base_path().'/uploads',$newName);
       			$cretae_path = base_path().'/uploads/'.$newName;
       			//dd($cretae_path);
       			//dd($file);
        			Excel::load($cretae_path, function($reader) use($tabl_name){
       				//$data = $reader->all();
       				//获取excel的第几张表
       				$reader = $reader->getSheet(0);
       				//获取表中的数据
       				$data = $reader->toArray();
       				$result = $this->create_table($tabl_name,$data);
        				dd($result);
       				//dd($data);
        			});
        		}
       		return view('query.index');
        	}
       	public function create_table($table_name,$arr_field)
        	{
       		$tmp = $table_name;
       		$va = $arr_field;
        		Schema::create("$tmp", function(Blueprint $table) use ($tmp,$va)
        		{
       			$fields = $va[0];  //列字段
       			//$fileds_count = 0; //列数
       			$table->increments('id');//主键
       			foreach($fields as $key => $value){
       				if($key == 0){
       					$table->string($fields[$key]);//->unique(); 唯一
        				}else{
       					$table->string($fields[$key]);
        				}
       				//$fileds_count = $fileds_count + 1;
        			}
        		});
       		$value_str= array();
       		$id = 1;
       		foreach($va as $key => $value){
       			if($key != 0){
       				$content = implode(",",$value);
       				$content2 = explode(",",$content);
       				foreach ( $content2 as $key => $val ) {
       					$value_str[] = "'$val'";
        				}
       				$news = implode(",",$value_str);
       				$news = "$id,".$news;
        				DB::insert("insert into db_$tmp values ($news)");
       				//$value_str = '';
       				$value_str= array();
       				$id = $id + 1;
        			}
        		}
       		return 1;
        	}
        }
    
   

 https://blog.csdn.net/a9925/article/details/51201405

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100028141

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。