2016-12-14 21 views
0

我在兩個系統上運行的LVL 45年2月5日:Laravel 5:在不同系統中輸出數值作爲整數或字符串?

  • OSX 10.11.6,用PHP 7.0.13(自制)
  • 的Ubuntu 14.04.5,用PHP 5.5.9-1ubuntu4.20

我從這段代碼獲得兩個不同的輸出(例如廷克):

App\Product::where('name', 'big brown bag')->get(); 

在OSX它輸出:

App\Product {#744 
id: 54, 
name: "Big Brown Bag", 
category_id: 3, 
company_id: 1, 
} 

在Ubuntu:

App\Product {#744 
id: 54, 
name: "Big Brown Bag", 
category_id: "3", 
company_id: "1", 
} 

注意周圍的IDS雙引號在Ubuntu輸出。 JSON中的輸出相同。

我該如何規範化呢?具體來說,我怎麼能強制它輸出ID爲整數?

在此先感謝

回答

1

至於你的情況是相當有趣的我,我花了一些時間來尋找你可能的答案。像Laravel這樣的框架使用PDO來處理不同類型的DBMS,這種方法需要特定的驅動程序。

我認爲這個問題是由於php5-mysql庫涉及到與MySQL數據庫的交互:這個lib不會將數字類型的列轉換爲類型號碼,而使用字符串留下Eloquent ORM類型作爲回報。

可能的解決方案是用php5-mysqlnd(sudo apt-get install php5-mysqlnd)替換php5-mysql庫。事實上,mysqlnd庫返回一個數字類型的值,而不是一個無關緊要的字符串。當你在你的環境中使用兩種不同類型的PHP版本時,我很確定這只是一個不同庫的問題(以及處理值數據類型的不同方式)。

更快,但污垢解決方案是將$ casts protected屬性定義爲數組,其中鍵是列,值是您希望該值被轉換的類型。在例如:

protected $casts = ['category_id' => 'integer'] 

This paragraph of the Laravel docs將是幫助那些有興趣的這種做法

總之,應該用填充了開發團隊的虛擬機來避免這類問題。 Laravel提供了一個非常棒的虛擬環境(我確定您已經聽說過Homestead),您甚至可以將其用於其他基於Web的應用程序,框架和CMS。

+0

謝謝你的時間和解釋的完整性。 –

相關問題