使用Lumen+MongoDB通过Maatwebsite\Excel导入数据报beginTransaction空调用错误
问题根因
Call to a member function beginTransaction() on null 错误是由于 Maatwebsite\Excel 扩展默认开启了导入事务功能,但Lumen搭配MongoDB使用的jenssegers/laravel-mongodb驱动的连接实例不支持事务,或是扩展未正确获取到适配MongoDB的连接,直接调用了空连接的事务方法导致的。
排查与解决步骤
- 关闭Excel导入的事务配置
首先在项目config/excel.php配置文件中(如果不存在该文件,先从Maatwebsite\Excel扩展包中复制配置文件到项目config目录),将事务配置项关闭:
另外需要确认Lumen已经加载Excel配置,在'transactions' => false,bootstrap/app.php中添加以下配置加载逻辑:$app->configure('excel'); - 调整导入类的实现逻辑
检查自定义导入类(实现ToCollection/ToModel接口的类),避免手动调用事务相关方法。优先使用ToCollection接口自行实现MongoDB数据的批量写入逻辑,不要依赖扩展默认的ToModel写入流程,减少对SQL数据库逻辑的依赖。 - 验证MongoDB驱动配置正确性
确认config/database.php中使用的数据库连接为MongoDB类型,且jenssegers/laravel-mongodb扩展已正确在bootstrap/app.php中注册服务提供者:
同时确认业务Model类继承的是MongoDB提供的基类,而非Laravel原生SQL的Model类:$app->register(Jenssegers\Mongodb\MongodbServiceProvider::class);use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
效果验证
修改完成后执行小批量导入测试,确认事务逻辑不再触发,数据可正常写入MongoDB即可。
内容的提问来源于stack exchange,提问作者Zuhair Khan
相关产品推荐
相关产品推荐

