1

ゲーム内のすべてのプレイヤーを表示するための foreach ループがいくつかあります。テーブルには 10 人のプレイヤーがいて、id 列は int 型で、自動インクリメントされます。コードは次のようになります。

foreach(Player::all() as $player) {
    echo $player->id;
}

私の開発用 Mac、MySQL 5.1.70 では、次のようになります。

これは、私のコードの他のすべての場所で一貫しています。さて、これが英数字のソートであることがわかりました。問題は、なぜですか?コードを大幅に変更せずに、開発マシンと一致させるためにサーバーで何を有効にできますか?

EloquentでPHP 5.4、Apache 2.4、Laravel 4.0.5を使用しています

更新:
これに対する別の症状が見つかりました。実際には問題の根本的な原因である可能性があります。サーバーへのクライアント側の AJAX 呼び出しを分析すると、値が開発サーバーからは int として返されるが、製品サーバーからは文字列として返されることがわかりました。 - 大量の不正行為を引き起こします。これは、ASCII ソートを取得する理由を説明しています。しかし、繰り返しになりますが、問題は次のとおりです。これを機能させるには、製品サーバーで何を「修正」する必要がありますか?

4

1 に答える 1

1

後世のために、ここに完全な答えがあります。最初に - @Wrikken のおかげで - 彼はコメントでそれを釘付けにしました。彼が回答として入力した場合、私はそれを正しいとマークします。

サーバー間で見つけた違い:

  1. MySQL 5.5 では、私のマシンの MyISAM とは対照的に、デフォルトのデータベース エンジンは InnoDB です。それは、どういうわけか、デフォルトのソート順に影響します。したがって、1 つの解決策は、Eloquent スキーマの作成に行を追加して、テーブルが MyISAM エンジンで確実に作成されるようにすることでした。

    Schema::create('blah', function($t) { $t->engine = "MyISAM"; $t->increments('id'); //その他のフィールド ... });

  2. 私の開発マシンでは int、float、boolean などではなく、すべての AJAX 結果が製品サーバーで文字列として返された理由は、MySQL Native Driver が製品マシンにインストールされていなかったためです。いくつかの試行錯誤の後、これを解決するために必要なことは、mysqlnd をインストールし ( sudo yum install php54-mysqlnd- 54 に注意してください!)、Apache を再起動することでした。

  3. 最後に、予測プログラムの動作を提供するためにサーバーの動作に依存していたという事実が残っています。これは大きな間違いです。そのため、コード内のすべての::all()呼び出しを に変更した::orderby('id')->get()ところ、サーバー、エンジン、データベースなどに関係なく、必要なものを取得できるようになりました。

于 2013-07-17T01:45:33.120 に答える