Laravel-excel: [BUG]错误导入:对象beginTransaction

创建于 2019-01-16  ·  13评论  ·  资料来源: Maatwebsite/Laravel-Excel

先决条件

  • [x]能够重现代码外部的行为,该问题被隔离到Laravel Excel中。
  • [x]检查您的问题尚未提交。
  • [x]检查是否未提交可解决此问题的PR。

版本号

  • PHP版本:7.2
  • Laravel版本:5.7.17
  • 套件版本:3.1.3

描述

我已经创建了导入对象类,并指定了ToCollection的关注点。 执行Excel :: import后,我收到以下Actual Behavior中显示的错误。

重现步骤

不要使用事务数据库。 我们使用MongoDB。

除此之外,未指定模型导入,并且程序包不应该进行任何数据库准备,而应该由开发人员通过事件进行处理。

预期行为:

集合行的dd。

实际行为:

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

附加信息

<?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

最有用的评论

也许你们遇到了我在#2384遇到的相同问题

也许我的解决方案对您有用,请尝试以下方法:

php artisan config:clear

有时,特别是在更新程序包时,Laravel不会清理缓存,而您的程序包也找不到配置文件。 因此,驱动程序将始终为NULL并失败。

所有13条评论

我们使用数据库事务进行验证和批量插入。 对于Eloquent / Laravel-DB用户而言,它们至关重要。 很高兴合并一个提供配置选项的PR,以禁止使用.eg Mongo的用户禁用它

下一版本将具有禁用Laravel-DB事务的设置以及添加自定义事务处理程序的方法

你好 !

我处于一种非常确切的情况:我不需要保存读取的数据,而我正在使用Mongo。

您能指出禁止交易的代码吗?

你好 !

我处于一种非常确切的情况:我不需要保存读取的数据,而我正在使用Mongo。

您能指出禁止交易的代码吗?

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

相关文档部分: https: //docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions

嗨,我处于相同的情况:我必须读取一个Excel文件,并将其存储在mongodb中。
我已经阅读了此修复程序,现在遇到的错误是:
“无法解析[MaatwebsiteExcel \ Transactions \ TransactionManager]的NULL驱动程序。
您知道如何解决吗?
谢谢你的大礼包。

编辑:我使用导入到集合,并且可以工作,但我仍然不知道为什么导入toModel会中断

因为Collection不使用交易。 请参考我之前的评论,它说明了如何禁用事务。

因为Collection不使用交易。 请参考我之前的评论,它说明了如何禁用事务。

嗨,谢谢您的快速答复。
我确实读过您的评论,这就是为什么我收到“无法解析[MaatwebsiteExcel \ Transactions \ TransactionManager]的NULL驱动程序”的原因。 错误。
所以我切换到收藏

然后,您可能在配置中输入了错误的内容。 NULL听起来不像是一个有效的驱动程序。 'null' (请注意,它是一个字符串)是。

我也有同样的情况,我在https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions上找到了解决方案
但是,我不知道如何创建Custom transaction handlers以及在哪里使用

我也有mongodb。 这个https://docs.laravel-excel.com/3.1/imports/validation.html#disable -transactions对我有用。 谢谢@patrickbrouwers

也许你们遇到了我在#2384遇到的相同问题

也许我的解决方案对您有用,请尝试以下方法:

php artisan config:clear

有时,特别是在更新程序包时,Laravel不会清理缓存,而您的程序包也找不到配置文件。 因此,驱动程序将始终为NULL并失败。

也许你们遇到了我在#2384遇到的相同问题

也许我的解决方案对您有用,请尝试以下方法:

php artisan config:clear

有时,特别是在更新程序包时,Laravel不会清理缓存,而您的程序包也找不到配置文件。 因此,驱动程序将始终为NULL并失败。

最佳答案

此页面是否有帮助?
0 / 5 - 0 等级