【发布时间】:2017-12-01 09:20:04
【问题描述】:
自定义获取模式的功能已从 L5.4 中移除,默认为 PDO::FETCH_OBJ。
升级指南声明您可以使用事件监听器覆盖它:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(...);
});
我一生都无法理解如何实现这一点:
1) 我应该把代码放在哪里?我应该用EventServiceProvider注册它吗?
2) StatementPrepared 事件何时触发? (我只需要为特定的存储库功能更改 Fetch Mode,而不是在全局范围内)。
3) FetchMode 是否会自动恢复以进行后续查询?
这是我的代码示例:
<?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;
}
}
谢谢!
【问题讨论】:
-
PS:代码示例在 Laravel 5.3 上运行良好
-
听这个并改变获取模式的含义:stackoverflow.com/questions/47637869/…
标签: php pdo eloquent laravel-5.4 internals