Повторяющиеся записи при импорте с laravel excel - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь загрузить несколько CSV-файлов одновременно, используя laravel Excel, но по неизвестной причине импортируются дубликаты, стоит отметить, что каждый раз, когда я делаю усечение в bd.

Я использую postgressql, laravel 5.8 и laravel excel 3.1

Контроллер

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Traits\storeTrait;

class ImportController extends Controller
{
    use storeTrait  {
        storeUsoSuelo as storeUsoSuelo;
        storeFundo as storeFundo;
        storeFundoGrilla as storeFundoGrilla;
        storeCuadrante as storeCuadrante;

    }
    public function store(Request $request)
    {
        $usoSuelo = 'uso_suelo.csv';
        $this->storeUsoSuelo($usoSuelo);

        $cuadrante = 'cuadrantes.csv';
        $this->storeCuadrante($cuadrante);

        $fundo = 'mv_qav_fundos.csv';
        $this->storeFundo($fundo);

        $fundoGrilla = 'fundos_grilla.csv';
        $this->storeFundoGrilla($fundoGrilla);

    }
}

storeTrait. php

<?php

namespace App\Traits;
use Illuminate\Http\Request;
use App\Imports\UsoSueloImport;
use App\Imports\CuadrantesImport;
use App\Imports\FundosImport;
use App\Imports\FundosGrillasImport;
use Maatwebsite\Excel\Facades\Excel;

trait storeTrait{

    public function storeUsoSuelo($archivo) {
        Excel::import(new UsoSueloImport,$archivo); 
    }
    public function storeFundo($archivo) {
        Excel::import(new FundosImport,$archivo); 
    }
    public function storeFundoGrilla($archivo) {
        Excel::import(new FundosGrillasImport,$archivo); 
    }
    public function storeCuadrante($archivo) {
        Excel::import(new CuadrantesImport,$archivo); 
    }
}

UsoSueloImport. php

<?php

namespace App\Imports;

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

class UsoSueloImport implements ToModel, WithHeadingRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new UsoSuelo([
            'cod_pais'     => $row['cod_pais'],
            'cod_fundo'     => $row['cod_fundo'],
            'nom_fundo'     => $row['nom_fundo'],
            'cod_uso_suelo'     => $row['cod_uso_suelo'],
            'dsc_uso_suelo'     => $row['dsc_uso_suelo'],
            'cod_rodal'     => $row['cod_rodal'],
            'cod_especie'     => $row['cod_especie'],
            'dsc_especie'     => $row['dsc_especie'],
            'ano_plantacion'     => $row['ano_plantacion'],
            'cod_esquema'     => $row['cod_esquema'],
            'dsc_esquema'     => $row['dsc_esquema'],
            'dsc_restriccion_suelo'     => $row['dsc_restriccion_suelo'],
            'sup_ha'    => $row['sup_ha'], 
            'cod_z_cpino'    => $row['cod_z_cpino'],
            'cod_z_prod'    => $row['cod_z_prod'], 
            'cod_sz_prod' => $row['cod_sz_prod'],
            'dsc_sz_prod' => $row['dsc_sz_prod'],
            'id_area_us' => $row['id_area_us'],
            'region' => $row['region'],
            'comuna' => $row['comuna'],
        ]);
    }
}

Остальные операции импорта аналогичны.

Например, мой файл «uso_suelo» имеет 27 строк, но в bd 54 строки загружены, с остальными то же самое, я пытаюсь импортировать только один файл, и происходит то же самое.

Я инициализирую его кнопкой

<a href="{{ url('/tablas') }}" class="btn btn-success">Generar Tablas</a>

Маршруты

Route::get('tablas', 'ImportController@store');
...