当前位置: 首页 > 知识库问答 >
问题:

无法在Laravel 8中导入excel数据。我是新手

景昊焜
2023-03-14

**我是laravel8的新手,尝试将数据从excel表导入数据库,这里是我在import类中的代码,它不传递,不会给出任何错误。所以数据库有关系我试图导入数据,并确保关系被考虑,这样我就不会有任何问题**


   <?php
   
   namespace App\Imports;
   
   use Illuminate\Support\Collection;
   use Maatwebsite\Excel\Concerns\ToCollection;
   use App\Models\District;
   use App\Models\Organisation;
   use App\Models\FocalPerson;
   use App\Models\Ta;
   use App\Models\Location;
   use App\Models\Service;
   use App\Models\Category;
   use App\Models\Type;
   
   
   
   
   class InformationImport implements ToCollection
   {
       /**
       * @param array $row
       *
       * @return \Illuminate\Database\Eloquent\Model|null
       */
       public function collection(Collection $rows)
       {
           foreach ($rows as $row) 
           {
               $instance_id = $row[1];
               $organisation_name = $row[2];
               $service_provider = $row[3];
               $catchment_area = $row[4];
               $organisation_type = $row[5];
               $district_name = $row[6];
               $organisation_web = $row[7];
               $primary_name = $row[8];
               $primary_title = $row[9];
               $primary_number = $row[10];
               $primary_email = $row[11];
               $secondary_name = $row[12];
               $secondary_number = $row[13];
               $secondary_title = $row[14];
               $secondary_email = $row[15];
               $services_name = $row[16];
               $location = explode(',',$row[17],2);
               return $location;
               $location_altitude = $row[18];
               $location_accuracy = $row[19];
               $comments_distance = $row[20];
               $data_comments = $row[21];
   
              $ta = Ta::where('name','like','%'.$row[4] .'%')->whereHas('district', 
               function($query) use($district_name){
                  $query->where('name','like','%'.$district_name .'%');
               })->get();
               if(!$ta){
                   $district = District::firstOrCreate([
                       'name' => $row[6]
                   ]);
                   $ta = new Ta;
                   $ta->name = $row[4];
                   $district->tas()->save($ta);
               }
               $gvh = Gvh::firstOrCreate([
                   'name' => 'unknown',
                   'ta_id' => $ta->id
               ]);
               $location = Location::firstOrCreate([
                   'latitude'=>$location,
                   'longitude'=>$location,
                   'gvh_id'=> $gvh->id
               ]);
               $service = Service::firstOrCreate([
                   'name'=>$services_name
               ]);
               $category = Category::firstOrCreate([
                   'name'=>'unknown'
               ]);
               $type = Type::firstOrCreate([
                   'name'=>$organisation_type
               ]);
               $organisation = Organisation::firstOrCreate([
                    'name'=> $organisation_name,
                    'location_id' => $location->id,
                    'organisation_type_id' => $type->id,
                    'organisation_category_id' => $category->id
               ]); 
               $focalperson =FocalPerson::firstOrCreate([
                   'title'=>  $primary_title, $secondary_title,
                   'name' => $primary_name,$secondary_name,
                   'phonenumber'=>$primary_number,$secondary_number,
                   'email'=> $primary_email, $secondary_email
               ]);
           }
       }
       
   }

**下面是我的controller类。在控制器中,这是l所拥有的代码,因为它没有带来任何东西,l必须以这种方式编写它,看看它是否能够输出消息**


 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\InformationImport;
use Maatwebsite\Excel\Facades\Excel;

class InformationController extends Controller
{
 
 public function import(Request $request) 
 {
     //Excel::import(new InformationImport, $request->file); 
     //return response()->json(['message' => 'Your data imported successfully !'], 200);
     if ($request->ajax()) {

         try {
 
             Excel::import(new InformationImport, $request->file);
 
             return response()->json(['message' => 'Your data imported successfully !'], 200);
 
         } catch (ValidationException $ex) {
 
             $failures = $ex->failures();
             foreach ($failures as $failure) {
                 return response()->json(['message' => 'Row - ' . $failure->row() . ', ' . $failure->errors()[0]], 500);
             }
 
         }
 
     }
     return response()->json(['message' => 'Something went wrong !'], 500);
 }
 
}

共有1个答案

周阳成
2023-03-14
   public function import(Request $request) 
   {
       ini_set('max_execution_time', -1);
       ini_set('memory_limit ', -1);
      
       if ($request->ajax()) {

          try {
             $file_content = $request->file('excel');
             $file_name = time() . '.xlsx';

             Storage::disk('local')->putFileAs('public', $file_content, $file_name);
             $url = "/app/public/" . $file_name;
             $path = storage_path() . $url;
             Excel::import(new InformationImport, $path);
 
             return response()->json(['message' => 'Your data imported successfully !'], 200);
 
         } catch (ValidationException $ex) {
 
             $failures = $ex->failures();
             foreach ($failures as $failure) {
                 return response()->json(['message' => 'Row - ' . $failure->row() . ', ' . $failure->errors()[0]], 500);
             }
         }
      }
      return response()->json(['message' => 'Something went wrong !'], 500);
     }
 类似资料:
  • 我无法导入内部 我一直在使用Linux Mint 19、Anaconda 3、pycharm 2019.3.1。 我创建了一个conda环境并安装了pygame: 然后我运行了。我得到了以下错误: 在互联网上读了一些博客后,我安装了, 之后如果我运行在我的conda环境的Linux终端上,我的代码成功运行。 但是如果我尝试在中运行相同的代码,我会得到以下错误: /home/tiago/anacon

  • 遇到了一个这样的问题,excel导入,需要设计表, 举例来说: 学生姓名、年龄、性别、2022年期末总分、2023年期末总分、2024年期末总分、2025年期末总分 这样的一个excel。应该如何设计这张表和实现导入功能呢? 数据量万条的数量级。 求指导

  • 本文向大家介绍Java中excel表数据的批量导入方法,包括了Java中excel表数据的批量导入方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java中excel表数据的批量导入,供大家参考,具体内容如下 首先看下工具类: 再看下from.jsp页面 主界面jsp 页面点击的效果是,点击导入会跳入from.jsp页面 再看controller层 service层 以上就是本文

  • 问题内容: 我们有一个现有的搜索功能,该功能涉及SQL Server中多个表之间的数据。这给我们的数据库造成了沉重的负担,因此我试图寻找一种更好的方式来搜索这些数据(它不会经常更改)。我与Logstash和Elasticsearch一起工作了大约一个星期,使用包含120万条记录的导入。我的问题本质上是“如何使用“主键”更新现有文档”? CSV数据文件(以竖线分隔)如下所示: 我的logstash配

  • 问题内容: 我有一个xlsx格式的下表,我想将其导入到我的sql数据库中: 该表非常复杂,我只需要‘1)HEADING’之后的记录 我一直在寻找要导入sql的php库,但它们似乎仅用于简单的excel文件。 问题答案: 您有两种方法可以实现: 第一种方法: 1)将其导出为某种文本格式。最简单的可能是制表符分隔的版本,但是CSV也可以使用。 2)使用负载数据功能。参见http://dev.mysql