Возможность настройки режима выборки была удалена из L5.4 и по умолчанию была установлена PDO :: FETCH_OBJ.
В руководстве по обновлению указано, что вы можете переопределить это, используя прослушиватель событий:
Event::listen(StatementPrepared::class, function ($event) { $event->statement->setFetchMode(...); });
Я не могу в жизни понять, как это реализовать:
1) Где я должен поместить код? Должен ли я регистрировать его с помощью EventServiceProvider
?
2) Когда срабатывает событие StatementPrepared
? (Мне нужно изменить режим Fetch для конкретных функций репозитория, а не в глобальном масштабе).
3) автоматически ли возвращается FetchM автоматически для последующих запросов?
Вот пример моего кода:
<?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; } }
Спасибо!
Перейти к: app / Providers / EventServiceProvider.php
Добавьте это в начало файла:
use Illuminate\Database\Events\StatementPrepared;
В методе загрузки добавьте:
Event::listen(StatementPrepared::class, function ($event) { $event->statement->setFetchMode(\PDO::FETCH_ASSOC); });