laravel數據庫查詢返回的數據形式


版本:laravel5.4+

問題描述:laravel數據庫查詢返回的數據不是單純的數組形式,而是數組與類似stdClass Object這種對象的結合體,即使在查詢構造器中調用了toArray(),也無法轉換成單純的數組形式。

問題解析

(以上圖片來源於laravel學院5.3版本到5.4版本的升級手冊)

如上圖所示:Laravel不再支持在配置文件中定制PDO的“fetch mode”,取而代之,總是使用PDO::FETCH_OBJ,如果你仍然想要為應用定制fetch模式,需要監聽新的Illuminate\Database\Events\StatementPrepared事件。

問題解決

打開app/Providers/EventServiceProvier.php,如文檔上所說,我們要先引入Illuminate\Database\Events\StatementPrepared類

use Illuminate\Database\Events\StatementPrepared;

然后在boot方法中加入如圖中給出的樣例代碼:

Event::listen(StatementPrepared::class, function ($event) { $event->statement->setFetchMode(\PDO::FETCH_ASSOC); //這里我們使用PDO::FETCH_ASSOC });
這樣我們就大功告成啦,現在你的laravel數據庫查詢返回的數據就是單純的數組形式。
最后附上app/Providers/EventServiceProvier.php的整體代碼:

<?php
namespace App\Providers;

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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM