php - 在 Laravel 8 中使用 maatwebsite laravel excel 导入数据

标签 php excel laravel laravel-8 laravel-excel

这是我第一次尝试使用 Maatwebsite/Laravel-Excel 使用 Laravel 8 打包。
我正在尝试将数据从 excel 文件导入数据库表。
我的 table :
enter image description here
但我有一些困难或疑问:

  • 在我的数据库表中,我有一个外键,这意味着当我要导入数据时,我应该存储外键而不是值,例如:我有 id_type_facturation我的数据表中的列,所以我应该存储 id 而不是像“Conrat”这样的值。
  • 我有另一个约束,来自我的 excel 文件,列 date_of_birth ,我应该计算年龄,如果年龄小于 18 我应该将 parent 的信息存储在另一个表中,如果年龄大于 18 它不应该将信息存储在表 parents 中。
  • 我还有一个图像列,我应该将它插入到数据库表中。

  • 我完成了所有过程,但我使用以下代码从表单中获取数据:
    public function store(Request $request)
    
    {
           $representants = new Representant();
           $castings = new Casting();
    
    
           $id_filiale= Auth::user()->id_filiale;
      
           $datee = $request['date_naissance'];
    
           $time = strtotime($datee);
    
           $date = date('Y-m-d',$time);
         
          
    
         $age = Carbon::parse($date)->diff(Carbon::now())->y;
    
        
           $rules = array(
    
             'nom' => 'required',
             'prenom' => 'required',
             'cine' => 'required|unique:castings',
             'date_naissance' => 'required',
             'lieu_naissance' => 'required',
             'id_type_facturation' => 'required',
             'artiste' => 'required',
             'fonction' => 'required',
             'id_type_casting' => 'required',
             'tel1' => 'required',
             'tel2' => 'required',
             'email' => 'required',
             'qualification' => 'required',
             'adresse' => 'required',
             'ville' => 'required',
             'pays' => 'required'
          
                
                 );
    
    
           $rules_message = array(
    
             'nom.required' => 'Le nom est requis',
             'prenom.required' => 'Le prénom est requis',
             'cine.required' => 'Le CINE est requis',
             'cine.unique' => 'Le CINE a déjà été pris',
             'date_naissance.required' => 'La date de naissance est requise',
             'lieu_naissance.required' => 'Le lieu de naissance est requis',
             'id_type_facturation.required' => 'Le type de facturation est requis',
             'artiste.required' => 'Est ce que c\'est un artiste ? ',
             'fonction.required' => 'La fonction est requise',
             'id_type_casting.required' => 'Le type de facturation est requis',
             'tel1.required' => 'Le numéro de téléphone 1 est requis',
             'tel2.required' => 'Le numéro de téléphone 2 est requis',
             'email.required' => 'L\'adresse email est requise',
             'qualification.required' => 'La qualification est requise',
             'adresse.required' => 'L\'adresse est requise',
             'ville.required' => 'La ville est requise',
             'pays.required' => 'La pays est requis',
          
                
                 );
    
    
              $error = Validator::make($request->all(), $rules,$rules_message);
    
                        if($error->fails())
                        {
                            return response()->json(['errors' => $error->errors()->all()]);
                        }
    
          if ($age < 18) {
    
                
    
           $image = $request->file('photo');
    
           $new_name = rand() . '.' . $image->getClientOriginalExtension();
    
           $image->move(public_path('castingimages'), $new_name);
    
                 $representants->nom_prenom = $request['nom_prenom'];
                 $representants->cine = $request['cine_representant'];
                 $representants->lien_casting = $request['lien_casting'];
                 $representants->save();
    
                 
                 $castings->nom = $request['nom'];
                 $castings->prenom = $request['prenom'];
                 $castings->cine = $request['cine'];
                 $castings->date_naissance = $date  ;
                 $castings->lieu_naissance = $request['lieu_naissance'];
                 $castings->mineur = 1;
                 $castings->id_representant = $representants->id;
    
                 $castings->id_type_facturation = $request['id_type_facturation'];
                 $castings->artiste = $request['artiste'];
                 $castings->fonction = $request['fonction'];
                 $castings->id_type_casting = $request['id_type_casting'];
                 $castings->tel1 = $request['tel1'];
                 $castings->tel2 = $request['tel2'];
                 $castings->email = $request['email'];
                 $castings->photo = $new_name;
    
                 $castings->qualification = $request['qualification'];
                 $castings->adresse = $request['adresse'];
                 $castings->ville = $request['ville'];
                 $castings->pays =  $request['pays'];
    
                 $castings->id_filiale =  $id_filiale;
    
                 $castings->save();
    
                return response()->json(['success' => 'Casting/Influenceur ajouté avec succès.']);  
     
      }else
    
      {
         
                $image = $request->file('photo');
    
                $new_name = rand() . '.' . $image->getClientOriginalExtension();
    
                $image->move(public_path('castingimages'), $new_name);
    
               
    
                 $castings->nom = $request['nom'];
                 $castings->prenom = $request['prenom'];
                 $castings->cine = $request['cine'];
                 $castings->date_naissance = $date  ;
                 $castings->lieu_naissance = $request['lieu_naissance'];
                 $castings->mineur = 0;
               
    
                 $castings->id_type_facturation = $request['id_type_facturation'];
                 $castings->artiste = $request['artiste'];
                 $castings->fonction = $request['fonction'];
                 $castings->id_type_casting = $request['id_type_casting'];
                 $castings->tel1 = $request['tel1'];
                 $castings->tel2 = $request['tel2'];
                 $castings->email = $request['email'];
                 $castings->photo = $new_name;
    
                 $castings->qualification = $request['qualification'];
                 $castings->adresse = $request['adresse'];
                 $castings->ville = $request['ville'];
                 $castings->pays =  $request['pays'];
                 $castings->id_filiale =  $id_filiale;
    
    
                 $castings->save();
    
                     return response()->json(['success' => 'Casting/Influenceur ajouté avec succès.']); 
      }
        
        }
    
    除了从 excel 文件中获取数据之外,我还能做同样的事情吗?
    如果您对此有任何想法,或者如果您知道我是否可以用这个包做这些事情,请告诉我。

    最佳答案

    如果您只有值但没有 ID,但该值在您的数据库表中是唯一的,您可以这样做:

    $model = new YourModel;
    $model->some_id = OtherModel::where('unique_column', $request->input('some_value'))->sole()->id;
    $model->save();
    

    关于php - 在 Laravel 8 中使用 maatwebsite laravel excel 导入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68631890/

    相关文章:

    php - $conn->prepare 返回 false,找不到错误

    excel - 如何避免使用名为 Range 的副本进行选择并粘贴为链接?

    laravel - 如何在 Laravel 的实时服务器上解决此错误?

    laravel - 在laravel的JWT Auth中通过用户ID登录用户

    php - PHP 中的后期静态绑定(bind)到底是什么?

    即使用户离开网站也执行 MySQL 查询的 PHP 服务器端计时器?

    Python将Excel拆分为标题和值

    java - POI性能

    laravel - 如何在 Javascript 中将对象数组转换为 GraphQL 格式?

    php - 模拟测试对象的公共(public)方法