项目需要采用了 Lumen 来开发 RESTful API 但又有需要修改 PDO 的 Fetch Mode 的需求

由于 Lumen 文档并没有关于此的特别说明 便参照 Laravel 过往的做法 试图配置 config/database.php 并不起作用

在 翻阅 Laravel 文档中关于 升级变更的说明时才提到 在几周前发布的 5.4 版本 中不再支持 在配置文件中自定义 Fetch Mode (其实本身 Laravel 也一直不推荐修改)

如果需要这么做的话 目前采用的方案是 监听 StatementPrepared 事件 进行配置

对应到 Lumen 中也是一样的 可以在 EventServiceProvider 的 boot 方法中 设置


    public function boot()
    {
        // 修改 PDO Fetch Mode
        Event::listen(StatementPrepared::class, function($event) {
            $event->statement->setFetchMode( ... );
        });

        // 其他自定义监听事件
    }

当然 如果之前没有启用 EventServiceProvider 的话 还需要在 bootstrap/app.php 启用


// 去除前面的注释
$app->register(App\Providers\EventServiceProvider::class);