Laravel报错:调用未定义方法Maatwebsite\Excel\Excel::create()求助
解决Maatwebsite Excel
Excel::create() 未定义方法的问题 嘿,这个问题我之前也踩过坑!你碰到的Call to undefined method Maatwebsite\Excel\Excel::create()错误,核心原因是版本不兼容:Excel::create()是Maatwebsite Excel 2.x版本的写法,而你当前安装的大概率是3.0及以上的新版本,这个方法在新版本里已经被移除了,和你有没有配置服务提供者/别名没关系哦。
下面给你两种解决方案,推荐用第一种适配新版本的写法:
方案一:适配3.x+版本(推荐)
新版本的Maatwebsite Excel采用了基于「导出类」的架构,写法更规范,步骤如下:
生成导出类
在终端执行Artisan命令,生成一个导出类:php artisan make:export ItemsExport这个命令会在
app/Exports目录下生成ItemsExport.php文件。编写导出类逻辑
打开生成的ItemsExport.php,修改成以下内容(适配你的Item模型):<?php namespace App\Exports; use App\Models\Item; // 注意引入你的Item模型 use Maatwebsite\Excel\Concerns\FromCollection; class ItemsExport implements FromCollection { // 定义要导出的数据集合 public function collection() { return Item::get(); // 和你原代码里的查询逻辑一致 } }修改控制器代码
更新你的export_app_csv方法,使用新版本的导出方式:<?php namespace App\Http\Controllers; use App\Exports\ItemsExport; // 引入刚才生成的导出类 use Maatwebsite\Excel\Facades\Excel; class YourController extends Controller // 替换成你的控制器名称 { public function export_app_csv() { // 直接调用Excel的download方法,传入导出类实例和文件名 return Excel::download(new ItemsExport, 'test_export.xlsx'); } }
方案二:降级到2.x版本(不推荐)
如果你暂时不想改代码,也可以降级到支持Excel::create()的2.x版本,但要注意这个版本只兼容Laravel 5.x系列,执行以下Composer命令:
composer require maatwebsite/excel:2.1.30
降级后,你原有的控制器代码就能正常运行了,但新版本的功能你就用不上啦,所以还是推荐升级写法。
额外提醒
确认你的config/app.php配置是正确的(你已经加了服务提供者和别名,这部分没问题):
// 服务提供者 'providers' => [ // ... Maatwebsite\Excel\ExcelServiceProvider::class, ], // 别名 'aliases' => [ // ... 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ],
内容的提问来源于stack exchange,提问作者Lucentyr
相关产品推荐
相关产品推荐

