yii2
數據庫查詢默認返回的爲AR
對象,此時字段類型與數據庫的基本相符,但若是使用 asArray
以數組的方式返回時,默認字段類型全都是 string
,若是這樣 json_encode
後返回給 App
端的話,會被 Android/IOS
這些強類型語言端的工程師們噴死,php
會再次被推向風口。php
緣由是 pdo
在 yii2
盛行時還不夠完善,一些特性是後期加進來的,好比咱們急切須要的返回的結果數據類型與數據庫一致。mysql
<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => '123456', 'charset' => 'utf8', 'tablePrefix' => 'yii_', 'attributes' => [ PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMULATE_PREPARES => false, ] // Schema cache options (for production environment) //'enableSchemaCache' => true, //'schemaCacheDuration' => 60, //'schemaCache' => 'cache', ];
yii2
在數據庫組件配置中添加attributes
的兩項配置便可。sql
未配置時:數據庫
// AR 對象的 attributes array (size=7) 'id' => string '1' (length=1) 'account' => string 'big_cat' (length=7) 'password' => string 'e10adc3949ba59abbe56e057f20f883e' (length=32) 'age' => int 29 'created_at' => string '2019-05-16 11:23:26' (length=19) 'updated_at' => string '2019-05-16 11:23:26' (length=19) 'status' => int 1 // asArray array (size=7) 'id' => string '1' (length=1) 'account' => string 'big_cat' (length=7) 'password' => string 'e10adc3949ba59abbe56e057f20f883e' (length=32) 'age' => string '29' (length=2) 'created_at' => string '2019-05-16 11:23:26' (length=19) 'updated_at' => string '2019-05-16 11:23:26' (length=19) 'status' => string '1' (length=1)
配置後json
// AR 對象的 attributes array (size=7) 'id' => string '1' (length=1) 'account' => string 'big_cat' (length=7) 'password' => string 'e10adc3949ba59abbe56e057f20f883e' (length=32) 'age' => int 29 'created_at' => string '2019-05-16 11:23:26' (length=19) 'updated_at' => string '2019-05-16 11:23:26' (length=19) 'status' => int 1 // asArray array (size=7) 'id' => int 1 'account' => string 'big_cat' (length=7) 'password' => string 'e10adc3949ba59abbe56e057f20f883e' (length=32) 'age' => int 29 'created_at' => string '2019-05-16 11:23:26' (length=19) 'updated_at' => string '2019-05-16 11:23:26' (length=19) 'status' => int 1
能夠發現:
一、AR 對象默認就能將字段類型與數據庫中儘量的一致,但id
仍是string
類型。
二、以數組的方式返回結果時,yii2
默認將全部字段都以string
方式處理,經過配置pdo
屬性能徹底的將字段類型同數據庫一致。數組
配置pdo
屬性後查詢 AR 對象的話id
仍是沒有同數據庫字段類型一致,但數組方式查詢則徹底一致了。yii2
並且數組查詢方式更節省內存,性能更高(yii2
其實始終以數組模式查詢,若是不使用asArray
模式,會對查詢到的數組結果集結合對應的Model
進行映射成相應的AR
對象,即asArray
實際上是關閉了數組映射至AR
對象的步驟,參照),咱們爲App
提供數據時自己就是要提供一些數據標量,不必查詢數據對象,因此接口返回數據時都應該以asArray
的方式查詢,且配置PDO
的屬性以便保持數據字段類型的一致性,避免對接上的混亂。yii