Laravel 的 DB 查询是如何实现字段类型自动转的?
已经解决了
原来是PDO 设置问题, laravel中的 Illuminate\Database\Connectors\Connector
有:
protected $options = array(
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
);
关键的一项: PDO::ATTR_STRINGIFY_FETCHES => false
举个例子,有一条sql如:select * from factory limit 1
用php PDO查出结果集如下:
注意绿色框里的值均为 string 型;
但是用 laravel的方式,DB::connection()->select("select * from factory limit 1");
结果集如下:
同样结果,不同的是字段值的类型不同,原生的PDO 均是string ,但laravel 会转成相应的 int/float 型。。。
laravel 是如何做到的?debug 好久都没找出原因,求指教~