Как обновить данные в базе данных с помощью импорта Excel - PullRequest
0 голосов
/ 22 января 2019

как обновить данные в базе данных с помощью Excel Excel. я использую laravel 5.7 и maatwebsite 3.1

это мой контроллер:

public function import()
{
   $data = Excel::toArray(new ProdukImport, request()->file('file')); 
   if ($data) {
       DB::table('produk')
            ->where('id_produk', $data['id'])
            ->update($data);
   }
}

Это мой класс импорта:

<?php

 namespace App\Imports;

 use App\Produk;
 use Maatwebsite\Excel\Concerns\ToModel;
 use Maatwebsite\Excel\Concerns\WithHeadingRow;


 class ProdukImport implements ToModel, WithHeadingRow
 {
    /**
     * @param array $row
     *
     * @return \Illuminate\Database\Eloquent\Model|null
     */
    public function model(array $row)
    {
       return new Produk([
          'id_produk' => $row['id'],
          'nama_produk' => $row['produk'],
          'harga_jual' => $row['harga']
       ]);
     }
  }

результат этого дд ($ data):

array:1 [▼
   0 => array:8 [▼
      0 => array:3 [▼
         "id" => 1.0
         "produk" => "Pomade"
         "harga" => 90000.0
      ]
      1 => array:3 [▼
         "id" => 2.0
         "produk" => "Shampoo"
         "harga" => 90000.0
      ]
      2 => array:3 [▼
         "id" => 3.0
         "produk" => "Sikat WC"
         "harga" => 90000.0
      ]
    ]
]

результат $ data получается из этого: $ data = Excel :: toArray (новый ProdukImport, request () -> file ('file'));

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Исходя из структуры массива $data, вы, вероятно, могли бы достичь желаемого с помощью чего-то подобного:

public function import()
{
    $data = Excel::toArray(new ProdukImport, request()->file('file')); 

    return collect(head($data))
        ->each(function ($row, $key) {
            DB::table('produk')
                ->where('id_produk', $row['id'])
                ->update(array_except($row, ['id']));
        });
}
0 голосов
/ 22 января 2019

Вот простая функция для вставки данных в БД с использованием файла Excel.

 public function importData(Request $request){
    if($request->hasFile('sample_file')){
        $path = $request->file('sample_file')->getRealPath();
        $data = \Excel::load($path)->get();
        if($data->count()){
            foreach ($data as $key => $value) {
                $arr[] = ['name' => $value->name, 'details' => $value->details];
            }
            if(!empty($arr)){
                \DB::table('table_name')->insert($arr);
                dd('Insert Record successfully.');
            }
        }
    }
...