自定义 fetch 模式的能力在 L5.4 中被移除,并默认采用 PDO::FETCH_OBJ。
升级指南中指出,您可以通过使用事件侦听器来覆盖此设置:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(...);
});
我真的不明白如何实现这个:
1)代码应该放在哪里?应该在 EventServiceProvider
中注册吗?
2)StatementPrepared
事件何时触发?(我只需要更改特定存储库函数的获取模式,而不是全局范围内)。
3)获取模式是否会自动为后续查询恢复默认值?
这里是我的代码示例:
<?php
namespace App\Repositories\Backend;
use DB;
use PDO;
class SystemRepository
{
/**
* Get the connection status variables.
*
* @return array
*/
public function getConnectionStatus()
{
DB::connection('backend')->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::connection('backend')
->select(DB::raw("
SHOW STATUS
WHERE Variable_name = 'Max_used_connections'
OR Variable_name = 'Max_used_connections_time'
OR Variable_name = 'Threads_connected'
"))
;
DB::connection('backend')->setFetchMode(PDO::FETCH_CLASS);
return $result;
}
}
谢谢!