Edw*_*ard 7 php pdo internals eloquent laravel-5.4
从L5.4中删除了自定义获取模式的能力,默认为PDO :: FETCH_OBJ.
升级指南指出您可以使用事件侦听器来覆盖它:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(...);
});
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活理解如何实现这个:
1)我应该在哪里放置代码?我应该注册EventServiceProvider吗?
2)StatementPrepared活动什么时候开火?(我只需要更改特定存储库功能的获取模式,而不是全局范围内).
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;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
转到:app/Providers/EventServiceProvider.php
将其添加到文件顶部:
use Illuminate\Database\Events\StatementPrepared;
Run Code Online (Sandbox Code Playgroud)
在boot方法中添加:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3953 次 |
| 最近记录: |