La possibilité de personnaliser le mode de récupération a été retirée de L5.4 et est par défaut à PDO :: FETCH_OBJ.Laravel 5.4 - Comment régler le mode d'extraction PDO?
Le guide de mise à niveau indique que vous pouvez corriger cela en utilisant un écouteur d'événement:
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(...);
});
Je ne peux pas pour la vie de me comprendre comment implémenter ceci:
1) Où dois-je placer le code? Dois-je l'enregistrer avec le EventServiceProvider
?
2) Quand l'événement StatementPrepared
se déclenche-t-il? (J'ai seulement besoin de changer le mode Fetch pour des fonctions spécifiques du référentiel, pas à l'échelle globale).
3) Le FetchMode se rétablit-il automatiquement pour les requêtes suivantes?
Voici un exemple de mon code:
<?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;
}
}
Merci!
PS: L'exemple de code fonctionnait parfaitement sur Laravel 5.3 – Edward
Be sont des implications à l'écoute de cette et changer le mode de récupération: https://stackoverflow.com/questions/47637869/database-query-builder-sometimes-returns-array-instead-of-object-running-as-a-qu – patriziotomato