2016-12-14 4 views
0

私は2つのシステム上のLVL 5.2.45を実行している:PHP 7.0.13 PHP 5.5.9-1ubuntu4.20と(自作) Laravel 5:数値は異なるシステムで整数または文字列として出力されますか?

  • のUbuntu 14.04.5、と

    • OSX 10.11.6、

    私はこのコードから二つの異なる出力を取得しています(例:ティンカーで。):

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

    はOSX上では、出力:

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

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

    は、Ubuntuの出力内のIDを二重引用符に注意してください。 JSONの同じ出力。

    これを正規化するにはどうすればよいですか?具体的には、idsを整数として出力するにはどうすればよいですか?

    事前

  • 答えて

    1

    のおかげで、あなたの場合は、私はあなたのための可能な答えを探していくつかの時間を過ごした私にとって非常に興味深いものだったよう。 Laravelのようなフレームワークは、異なる種類のDBMSを扱うためにPDOを使用します。このようなアプローチでは、特定のドライバが必要です。

    MySQLデータベースとのやりとりに関係するphp5-mysqlライブラリが原因で問題が発生していると思われます。このlibは数値型の列を型番号に変換せず、Eloquent ORMに文字列を残しています-typeを返します。

    可能な解決策は、php5-mysqlライブラリをphp5-mysqlnd(sudo apt-get install php5-mysqlnd)に置き換えることです。実際、mysqlndライブラリは、重要でない文字列の代わりに数値型の値を返します。あなたの環境で異なる2種類のPHPバージョンを扱っているので、別のライブラリ(そして値のデータ型を扱う別の方法)の問題であると確信しています。

    もっと速いですが、汚れソリューションは、キーが列で値がキャストされるタイプの配列として$ casts protectedプロパティを定義することです。例では:

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

    This paragraph of the Laravel docsは、これらのに役立つだろう。とにかくアプローチ

    、この種のことに興味がある、この種の問題は、開発チームのためにパックの仮想マシンを使用して避けるべきです。 Laravelは、他のWebベースのアプリケーション、フレームワーク、CMSにも使用できる素晴らしい仮想環境を提供しています(私はあなたがすでにHomesteadについて聞いたと思います)。

    +0

    説明の時間と完全さをありがとうございます。 –

    関連する問題