如何使用导入excel更新数据库中的数据

Rah*_*ndi 3 php laravel laravel-5 laravel-excel maatwebsite-excel

如何使用导入excel更新数据库中的数据。我正在使用 laravel 5.7 和 maatwebsite 3.1

\n

这是我的控制器:

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

这是我的导入类:

\n
<?php\n\n namespace App\\Imports;\n\n use App\\Produk;\n use Maatwebsite\\Excel\\Concerns\\ToModel;\n use Maatwebsite\\Excel\\Concerns\\WithHeadingRow;\n\n\n class ProdukImport implements ToModel, WithHeadingRow\n {\n    /**\n     * @param array $row\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Model|null\n     */\n    public function model(array $row)\n    {\n       return new Produk([\n          'id_produk' => $row['id'],\n          'nama_produk' => $row['produk'],\n          'harga_jual' => $row['harga']\n       ]);\n     }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

这个 dd($data) 结果:

\n
array:1 [\xe2\x96\xbc\n   0 => array:8 [\xe2\x96\xbc\n      0 => array:3 [\xe2\x96\xbc\n         "id" => 1.0\n         "produk" => "Pomade"\n         "harga" => 90000.0\n      ]\n      1 => array:3 [\xe2\x96\xbc\n         "id" => 2.0\n         "produk" => "Shampoo"\n         "harga" => 90000.0\n      ]\n      2 => array:3 [\xe2\x96\xbc\n         "id" => 3.0\n         "produk" => "Sikat WC"\n         "harga" => 90000.0\n      ]\n    ]\n]\n
Run Code Online (Sandbox Code Playgroud)\n

结果$data是这样的:

\n
 $data = Excel::toArray(new ProdukImport, request()->file('file'));\n
Run Code Online (Sandbox Code Playgroud)\n

Moz*_*mil 5

根据$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']));
        });
}
Run Code Online (Sandbox Code Playgroud)