40% de descuento en todos los planes

4d: 20h: 31m:43s'
Edward Lopez
Edward Lopez
Laravel
Comparte:

Mostrar total de registros realizados en un import con Laravel-Excel

Hola a todos, quisiera saber como puedo obtener el total de registros realizados en una importación con laravel-excel
Controlador
$colaboradores = (new CumpleColaboradorImport($request->cumple_agremiacion_id))->import($request->file('excel-colaboradores'));
Importable

class CumpleColaboradorImport implements ToModel, WithStartRow
{
    use Importable;
    
    public $count       = 0;
    public $agremiacion = null;
    public function __construct($agremiacion)
    {
        $this->agremiacion = $agremiacion;
    }
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        if( $row[0] === '' && strlen($row[0]) <= 5 && $this->formatoDocumento($row[1]) >= 1000 ){
            return null;
        }
        
        $this->count++;
        $documento        = $this->formatoDocumento($row[1]);
        $fecha_nacimiento = $this->getDateFromExcel($row[2]);
        $fecha_nacimiento = \Carbon\Carbon::createFromFormat('Y-m-d', $fecha_nacimiento);
        return CumpleColaborador::updateOrCreate([
            "documento" => $documento,
        ],[
            "agremiacion_id"     => $this->agremiacion,
            "nombre"             => \trim($row[0]),
            "fecha_nacimiento"   => $fecha_nacimiento->format('Y-m-d'),
            "mes_cumple"         => $fecha_nacimiento->month,
            "dia_cumple"         => $fecha_nacimiento->day,
            "correo_personal"    => \trim($row[3]),
            "correo_corporativo" => \trim($row[4]),
        ]);
    }
    /**
    * @return int
    */
    public function startRow() : int {
        return 2;
    }
}
Jorge Davila
Jorge Davila (0 xp)
Puedes complicartela menos y usar un metodo "count" de la coleccion para obtener dicho valor.
Eloquent te devuelve una coleccion cuando haces una consulta, por lo que podrias hacer algo asi.

$colaboradores=Colaborador::where('agremiacion_id',$request->agremiacion_id)->get();
$rows=$colaboradores->count();
Y ya simplemente se la pasas al metodo donde requieres utilizar dicho valor.
Edward Lopez
Edward Lopez (0 xp)
Jorge esa solución es útil si antes de realizar la exportación no hay registros en esa tabla ya que el método count() me devolverá el total de registros que coinciden con la busquedad y no el total de registros que se realizaron en la exportación.
Jorge Davila
Jorge Davila (0 xp)
Segun la documentacion , podrias hacer lo siguiente:


function getColumnNames($sheename, $path){
    return Excel::selectSheets($sheename)->load($path)->keys()->toArray();
}

$count=count(getColumnNames('my_sheet', $my_file);