在實現一個多級菜單功能時,發現 Laravel 從 MySQL 獲取的整型數據被轉換成了 string 類型, 導致使用 collection filter 無法得到對應的數據。但是並不是在所有機器上都能出現,只有在服務器上纔會
開發機 (Mac / Ubuntu 16.04)
[2016-07-07 08:17:43] local.INFO: [{"id":1,"level":1}]
生產環境 (Ubuntu 12.04)
[2016-07-07 09:06:07] local.INFO: [{"id":1,"level":"1"}]
可以看到,代表菜單層級的 level 字段,在生產環境中變成了字符串。
確認了表結構沒有問題,說明問題出在了數據被取出來的過程中。於是 Google 了一下,發現問題出在了 PHP 的 MySQL 驅動上
MySQL integer field is returned as string in PHP
laravel eloquent integers returned as strings in mssql
而在 PHP 5.3 版本之後則不會出現該問題,於是更新 PHP 的 MySQL 驅動
sudo apt-get update
sudo apt-get install php5-mysqlnd
無需重啓 Nginx, 再次測試,發現一切正常,說明問題解決
[2016-07-07 09:22:38] local.INFO: [{"id":1,"level":1}]