Laravel-excel: [ERROR] Error al importar: objeto beginTransaction

Creado en 16 ene. 2019  ·  13Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

Prerrequisitos

  • [x] Capaz de reproducir el comportamiento fuera de su código, el problema está aislado en Laravel Excel.
  • [x] Verificó que su problema aún no se haya presentado.
  • [x] Se verificó si no se envió ningún RP que solucione este problema.

Versiones

  • Versión de PHP: 7.2
  • Versión de Laravel: 5.7.17
  • Versión del paquete: 3.1.3

Descripción

Creé la clase de objeto de importación y especifiqué las preocupaciones de ToCollection. Al realizar Excel :: import, recibo un error que se muestra en Actual Behavior continuación.

Pasos para reproducir

No utilice una base de datos transaccional. Usamos MongoDB.

Aparte de eso, no se especificó la importación de modelos y el paquete no debería realizar ninguna preparación de la base de datos, que debería ser manejada a través de eventos por parte del desarrollador.

Comportamiento esperado:

dd de las filas de la colección.

Comportamiento real:

1) Tests\Unit\Services\Websites\WebsiteCredentialsImportServiceTest::testImportTabDelimited
Error: Call to a member function beginTransaction() on null

/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:109
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:93
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php:23
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:327
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Reader.php:96
/var/www/vhosts/website.local/vendor/maatwebsite/excel/src/Excel.php:120
/var/www/vhosts/website.local/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:198
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:182
/var/www/vhosts/website.local/app/Services/Websites/WebsiteCredentialsImportService.php:122
/var/www/vhosts/website.local/tests/Unit/Services/Websites/WebsiteCredentialsImportServiceTest.php:25

Información Adicional

<?php

namespace App\Imports\Websites;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

/**
 * Class WebsiteCredentialsImport
 *
 * <strong i="29">@package</strong> App\Imports\Websites
 */
class WebsiteCredentialsImport implements ToCollection
{
    public function collection(Collection $rows)
    {
        dd(['COLLECTION' => $rows]);
    }
}
        $collection = Excel::import(
            new WebsiteCredentialsImport,
            $this->file_name,
            null,
            $this->reader_type
        );
enhancement help wanted

Comentario más útil

Tal vez ustedes estén teniendo el mismo problema que yo en el # 2384.

Tal vez mi solución funcione para usted, pruebe con:

php artisan config:clear

A veces, especialmente al actualizar un paquete, Laravel no limpiará el caché y su paquete no encontrará los archivos de configuración. Por lo tanto, el controlador siempre será NULL y fallará.

Todos 13 comentarios

Usamos las transacciones de la base de datos para la validación y las inserciones de lotes. Son bastante vitales para los usuarios de Eloquent / Laravel-DB. Feliz de fusionar un PR que ofrece una opción de configuración para deshabilitarlo para los usuarios que usan .eg Mongo

La próxima versión tendrá una configuración para deshabilitar las transacciones Laravel-DB + una forma de agregar controladores de transacciones personalizados

Hola !

Estoy en una situación muy exacta: NO necesito guardar los datos leídos y estoy usando Mongo.

¿Podría indicarme el código que deshabilita las transacciones?

Hola !

Estoy en una situación muy exacta: NO necesito guardar los datos leídos y estoy usando Mongo.

¿Podría indicarme el código que deshabilita las transacciones?

https://github.com/Maatwebsite/Laravel-Excel/commit/13374dab1592f00f715fa0e02541ecb52217655b#diff -19c82312ec0dbaba6a8c595db14fa56f

Sección de documentación relevante: https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions

Hola, estoy en la misma situación: tengo que leer un archivo de Excel y necesito almacenarlo en mongodb.
He leído la solución y el error que tengo ahora es:
"No se puede resolver el controlador NULL para [MaatwebsiteExcel \ Transactions \ TransactionManager]".
¿Tienes idea de cómo solucionarlo?
Gracias por el gran paquete.

editar: utilicé la importación a la colección y funciona, pero todavía no sé por qué se rompe la importación al modelo

Porque Collection no usa transacciones. Consulte mi comentario anterior, explica cómo deshabilitar las transacciones.

Porque Collection no usa transacciones. Consulte mi comentario anterior, explica cómo deshabilitar las transacciones.

Hola, gracias por tu rápida respuesta.
Leí su comentario, por eso recibí el mensaje "No se puede resolver el controlador NULL para [MaatwebsiteExcel \ Transactions \ TransactionManager]". error.
Así que cambié a colección

Probablemente esté escribiendo algo mal en su configuración entonces. NULL no suena como un controlador válido. 'null' (tenga en cuenta que es una cadena) es.

También tengo la misma situación, obtuve la solución en https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions
Pero, no sé cómo crear Custom transaction handlers y dónde usarlo

Yo también tengo mongodb. esto https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions funciona para mí. Gracias @patrickbrouwers

Tal vez ustedes estén teniendo el mismo problema que yo en el # 2384.

Tal vez mi solución funcione para usted, pruebe con:

php artisan config:clear

A veces, especialmente al actualizar un paquete, Laravel no limpiará el caché y su paquete no encontrará los archivos de configuración. Por lo tanto, el controlador siempre será NULL y fallará.

Tal vez ustedes estén teniendo el mismo problema que yo en el # 2384.

Tal vez mi solución funcione para usted, pruebe con:

php artisan config:clear

A veces, especialmente al actualizar un paquete, Laravel no limpiará el caché y su paquete no encontrará los archivos de configuración. Por lo tanto, el controlador siempre será NULL y fallará.

La mejor respuesta

¿Fue útil esta página
0 / 5 - 0 calificaciones