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 好久都没找出原因,求指教~
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: