2017-03-14 7 views
0

私のLaravelアプリケーションに奇妙なバグがあります。PHP Laravel:varの種類がローカルからサーバーに異なる

モデルxのプロパティstatusは、ローカルホストの整数ですが、プロダクションサーバーの文字列です。

"status" => 1 "status" => "1"

私は厳密な比較を使用していますので、これは私のアプリケーションでエラーがスローされます。

両方とも、Laravel Framework 5.4.1をPHP 5.6でMySQLと共に使用します。

だから私は違いがどこから来るのか分からない...あなたですか?

+0

私は 'status'をモデル' x'の文字列にキャストしていると仮定できます。 'protected $ casts = [ ステータス '=>'文字列 '、 ]'です。おそらくそれは何か? – Jack

+0

@Jackご返信ありがとうございますが、私は何もキャストしていません...オハイオ州の提案があれば、私はそうするかもしれません。しかし、私は違いがどこから来て、それがより多くの問題をもたらす可能性があるか理解していない... – Jachinair

+0

ええ、コードベースがまったく同じなら、それは起こらないはずです。私はサーバーを破壊し、別のものをスピンアップして何かが間違っているかどうかを確認します。 – Jack

答えて

2

これは、phpとmysqlの間で使用されるドライバによって異なります。そのうちの一つは、あなたの出力は整数としてネイティブドライバのリターン整数が、他の

pdo_mysql 

PDO Driver for MySQL => enabled 
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $ 

のようになります

php -i 

の出力のPDO_MYSQLセクションを確認して使用され

チェックそれらを文字列として返します。

解決方法は、古いドライバを削除し、ネイティブドライバをインストールすることです。

または$castsを使用してください。

protected $casts = [ 
    'status' => 'integer', 
]; 
+0

ご返信ありがとうございます。 locahostには、mysqlnd 5.0.11-dev - 20120503 - $ Id:76b08b24596e12d4553bd41fc93cccd5bac2fe7a $がありますが、サーバー上には私は単純に '5.5.54'です。私のプロパティがlocalhost上のintであれば、それは 'mysqlnd 5.0.11-dev - 20120503 - $ Id:76b08b24596e12d4553bd41fc93cccd5bac2fe7a $'がネイティブドライバであることを意味しますか?あなたは生産現場のドライバーがどこから来たのか、なぜ私は同じドライバーがいないのか知っていますか?私は何もインストールしていないと思う。私は今私はドライバを削除することができます見てみましょう。 – Jachinair

+0

はい 'mysqlnd'はネイティブドライバです。 プロダクションサーバーの設定方法がわかりませんが、パッケージ管理にアクセスできる場合は、ネイティブドライバを検索してインストールすることができます。 ubuntuベースの 'sudo apt-get php5-mysqlnd'をインストールすると –

+0

がインストールされ、問題は修正されました。ありがとうございました。 – Jachinair

関連する問題