【问题标题】:Import data with maatwebsite laravel excel in Laravel 8在 Laravel 8 中使用 maatwebsite laravel excel 导入数据
【发布时间】:2021-10-08 09:57:27
【问题描述】:

这是我第一次尝试使用 Laravel 8 处理 Maatwebsite/Laravel-Excel 包。

我正在尝试将数据从 excel 文件导入数据库表。

我的桌子:

但我有一些困难或问题:

  1. 在我的数据库表中,我有一个外键,这意味着当我要导入数据时,我应该存储外键而不是值,例如:我的数据表中有 id_type_facturation 列,所以我应该存储 id 和而不是像“Conrat”这样的值。

  2. 我有另一个约束,从我的 excel 文件,列date_of_birth,我应该计算年龄,如果年龄小于 18,我应该在另一个表上存储父母的信息,如果年龄更大大于 18 它不应该将信息存储在表 parents 中。

  3. 我还有一个图像列,我应该将它插入到数据库表中。

我完成了所有过程,但我使用以下代码从表单中获取数据:

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 文件中获取数据之外,我还能如何做同样的事情? 如果您对此有任何想法,或者如果您知道我是否可以使用此软件包做这些事情,请告诉我。

【问题讨论】:

  • 要回答您的第一个问题,有多种可能的解决方案,具体取决于最适合您的方案:a) Excel 列值是唯一的,可以使用索引数据库列进行查询 b) 让 Excel 存储隐藏中的 ID(使用 VLOOKUP 或类似的东西)
  • @shaedrich,谢谢你的评论,如果你能解释更多我该怎么做

标签: php excel laravel laravel-8 laravel-excel


【解决方案1】:

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

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

【讨论】:

  • 我试过了,$casting-&gt;id_type_facturation = Type_Facturation::where('type_facturation',$row['type_facturation'] )-&gt;sole()-&gt;id ; 但我在数据库中得到 NULL 值
  • 很难说,为什么会这样。你比我更了解你的数据库架构和内容。也许TypeFacturation::dd()-&gt;where... 有帮助?
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 2020-08-28
  • 2020-07-09
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多