版本:laravel5.4+php
問題描述:laravel數據庫查詢返回的數據不是單純的數組形式,而是數組與相似stdClass Object這種對象的結合體,即便在查詢構造器中調用了toArray(),也沒法轉換成單純的數組形式。
html
問題解析:laravel
(以上圖片來源於laravel學院5.3版本到5.4版本的升級手冊)數據庫
如上圖所示:Laravel再也不支持在配置文件中定製PDO的「fetch mode」,取而代之,老是使用PDO::FETCH_OBJ
,若是你仍然想要爲應用定製fetch模式,須要監聽新的Illuminate\Database\Events\StatementPrepared
事件。數組
問題解決:app
打開app/Providers/EventServiceProvier.php,如文檔上所說,咱們要先引入Illuminate\Database\Events\StatementPrepared類
ide
use Illuminate\Database\Events\StatementPrepared;fetch
而後在boot方法中加入如圖中給出的樣例代碼:ui
Event::listen(StatementPrepared::class, function ($event) { $event->statement->setFetchMode(\PDO::FETCH_ASSOC); //這裏咱們使用PDO::FETCH_ASSOC
});
這樣咱們就大功告成啦,如今你的laravel數據庫查詢返回的數據就是單純的數組形式。
最後附上app/Providers/EventServiceProvier.php的總體代碼:
PDO::FETCH_ASSOC
<?php
namespace App\Providers;spa
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Database\Events\StatementPrepared;
class EventServiceProvider extends ServiceProvider{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
//
Event::listen(StatementPrepared::class, function ($event) {
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
});
}
}
轉載請註明出處哦 http://www.cnblogs.com/meng1314-shuai/p/7232080.html