使用Filament与Sushi扩展时出现Illuminate数据库驱动未找到异常求助
解决Laravel+Filament中Sushi扩展导致的"could not find driver"异常
问题场景
在PHP 8.1.18、Laravel 9.52.10环境下使用Filament框架,运行集成Sushi扩展的Product模型(从第三方API获取并处理产品数据)时,抛出Illuminate Database QueryException异常,提示could not find driver。已确认pdo_mysql扩展启用,普通Eloquent模型功能正常,原示例基于PHP 8.0开发。
解决方案
1. 显式配置Sushi的数据库连接
Sushi默认会复用Laravel默认数据库连接,但它依赖内存表特性,容易与MySQL驱动冲突。需为Sushi单独配置SQLite内存驱动:
- 在Product模型中指定连接:
use Sushi\Sushi; use Illuminate\Database\Eloquent\Model; class Product extends Model { use Sushi; // 显式指定Sushi专属连接 protected $connection = 'sushi'; public function getRows() { // 第三方API数据获取与处理逻辑 return $this->fetchAndProcessApiData(); } }
- 在
config/database.php的connections数组中添加Sushi配置:
'connections' => [ // 原有数据库连接... 'sushi' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], ],
2. 适配PHP 8.1语法与依赖
原示例基于PHP 8.0,需排查兼容性问题:
- 检查
getRows()方法中的数组解构、属性访问等语法,确保符合PHP 8.1规范 - 确认API请求依赖(如Guzzle)的版本兼容PHP 8.1,更新
composer.json后执行composer update
3. 清除Laravel缓存
缓存的配置可能导致驱动识别异常,执行以下命令清除缓存:
php artisan config:clear php artisan cache:clear php artisan view:clear
4. 验证Sushi数据源格式
Sushi要求getRows()返回二维数组结构,可临时打印数据确认格式:
public function getRows() { $data = $this->fetchAndProcessApiData(); dd($data); // 确认返回值为二维数组 return $data; }
内容的提问来源于stack exchange,提问作者Ignacio Olivieri
相关产品推荐
相关产品推荐

