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查出结果集如下:

file

注意绿色框里的值均为 string 型;

但是用 laravel的方式,DB::connection()->select("select * from factory limit 1");
结果集如下:

file

同样结果,不同的是字段值的类型不同,原生的PDO 均是string ,但laravel 会转成相应的 int/float 型。。。

laravel 是如何做到的?debug 好久都没找出原因,求指教~

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!