Laravel透過 PDO 取回資料的型態

PHP Laravel透過 PDO 取的資料的型態

在公司的專案
某個判斷我寫這樣

$data = 從資料庫拉回來的某欄位資料

if (array_search($data ,[54,94,87]) === false)
{
   //假如變數不是這三個數字時執行
}

在我本地端執行是正確的
在公司的測試伺服器卻執行不了
這時候我以為是git有衝突沒推成功
所以先檢查測試機環境的git log 看
诶明明程式碼一樣!!

前輩說話了
:程式碼一樣那就是環境的問題囉

於是我開始比對差異 
發現:
我所抓的某欄位值在測試伺服器端是"123"
在我自己Bulid的環境值是 123
去資料庫看看該欄位的型態是int

前輩又說話了
:試看看在你本地環境用mysqli去撈資料回來看看是什麼
結果是"123"

抓到熱心的傢伙了,
Laravel是透過PDO去連資料庫

Laravel預設的設定是,透過PDO會參考資料庫欄位所設定的型別
但在PDO版本不支援情況下取回來的資料將都是String

後來公司的案子有些我在本地端執行不了
又想到是不是這個問題
去查了一下
改Laravel DB對PDO的設定如下

MSSQL
/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php

@19行
  PDO::ATTR_STRINGIFY_FETCHES => false,
改為
  PDO::ATTR_STRINGIFY_FETCHES => true,

Mysql
 /vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php
@23、24行
  PDO::ATTR_STRINGIFY_FETCHES => false,
  PDO::ATTR_EMULATE_PREPARES => false,
改為
  PDO::ATTR_STRINGIFY_FETCHES => true,
  PDO::ATTR_EMULATE_PREPARES => true,

這樣我本地的環境就跟公司的環境一樣了

這不是BUG
反而取得資料庫欄位型別
才是符合強型別