Laravel-excel: [BUG] Erro na importação: objeto beginTransaction

Criado em 16 jan. 2019  ·  13Comentários  ·  Fonte: Maatwebsite/Laravel-Excel

Pré-requisitos

  • [x] Capaz de reproduzir o comportamento fora do seu código, o problema é isolado no Laravel Excel.
  • [x] Verificou se seu problema ainda não foi arquivado.
  • [x] Verificado se nenhum PR foi enviado que corrige este problema.

Versões

  • Versão PHP: 7.2
  • Versão do Laravel: 5.7.17
  • Versão do pacote: 3.1.3

Descrição

Eu criei a classe de objeto de importação e especifiquei as preocupações de ToCollection. Ao executar Excel :: import, recebo um erro mostrado em Actual Behavior abaixo.

Passos para reproduzir

Não use um banco de dados transacional. Usamos MongoDB.

Além disso, a importação do Model não foi especificada e o pacote não deveria estar fazendo nenhuma preparação de banco de dados, que deveria ser tratada por meio de eventos pelo desenvolvedor.

Comportamento esperado:

dd das linhas da coleção.

Comportamento 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

informação 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

Comentários muito úteis

Talvez vocês estejam tendo o mesmo problema que eu tive no # 2384

Talvez minha solução funcione para você, tente um:

php artisan config:clear

Às vezes, especialmente ao atualizar um pacote, o Laravel não limpará o cache e seu pacote não encontrará os arquivos de configuração. Assim, o driver será sempre NULL e falhará.

Todos 13 comentários

Usamos as transações do banco de dados para validação e inserções em lote. Eles são vitais para os usuários do Eloquent / Laravel-DB. Fico feliz em mesclar um PR que oferece uma opção de configuração para desativá-lo para usuários que usam.

A próxima versão terá uma configuração para desativar as transações do Laravel-DB + uma forma de adicionar manipuladores de transações personalizados

Oi !

Estou exatamente na situação: NÃO preciso salvar os dados lidos e estou usando o Mongo.

Você poderia me indicar o código que desabilita as transações?

Oi !

Estou exatamente na situação: NÃO preciso salvar os dados lidos e estou usando o Mongo.

Você poderia me indicar o código que desabilita as transações?

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

Seção de documentação relevante: https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions

Olá, estou na mesma situação: tenho que ler um arquivo excel e preciso armazená-lo no mongodb.
Eu li a correção e o erro que tenho agora é:
"Incapaz de resolver o driver NULL para [MaatwebsiteExcel \ Transactions \ TransactionManager]."
Tem ideia de como resolver isso?
Obrigado pelo ótimo pacote.

editar: eu usei a importação para a coleção e funciona, mas ainda não sei por que a importação para o modelo quebra

Porque a coleção não usa transações. Por favor, consulte meu comentário anterior, ele explica como desabilitar transações.

Porque a coleção não usa transações. Por favor, consulte meu comentário anterior, ele explica como desabilitar transações.

Oi, obrigado por sua resposta rápida.
Eu li seu comentário, é por isso que recebi o "Não foi possível resolver o driver NULL para [MaatwebsiteExcel \ Transactions \ TransactionManager]." erro.
Então mudei para a coleção

Você provavelmente está digitando algo errado em sua configuração. NULL não parece um driver válido. 'null' (note que é uma string) é.

Eu também tenho a mesma situação, consegui a solução em https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions
Mas, eu não sei como criar Custom transaction handlers e onde usá-lo

Eu também tenho mongodb. esta https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions funciona para mim. Thx @patrickbrouwers

Talvez vocês estejam tendo o mesmo problema que eu tive no # 2384

Talvez minha solução funcione para você, tente um:

php artisan config:clear

Às vezes, especialmente ao atualizar um pacote, o Laravel não limpará o cache e seu pacote não encontrará os arquivos de configuração. Assim, o driver será sempre NULL e falhará.

Talvez vocês estejam tendo o mesmo problema que eu tive no # 2384

Talvez minha solução funcione para você, tente um:

php artisan config:clear

Às vezes, especialmente ao atualizar um pacote, o Laravel não limpará o cache e seu pacote não encontrará os arquivos de configuração. Assim, o driver será sempre NULL e falhará.

Melhor resposta

Esta página foi útil?
0 / 5 - 0 avaliações