5

私は CakePHP にかなり慣れていませんが、これまでのところ非常に使いやすいと感じています。今日、データベースからのデータのエクスポートで問題が発生しました。

モデルの 1 つを JSON としてエクスポートしています。CakePHP が id 列を文字列としてエクスポートしていることに気付いたことを除けば、すべてうまくいっています。モデルは mysql で int として定義されています。JSON出力とモデルの両方でチェックしました-

var_dump($this->Post->findById($id));exit;

モデルでも、id は文字列として定義されます。

これは、ID として整数を取得するために使用される JSON 出力に依存する他のシステムを台無しにします。

モデルに $_schema 属性を設定してみましたが、何も変わりませんでした。

よろしくお願いします。

ありがとう、ダン

4

1 に答える 1

6

http://cakephp.1045679.n5.nabble.com/When-retrieving-data-fields-returned-as-strings-and-the-tale-of-climbing-a-mountain-to-cast-those-strを参照して ください-td4312868.html

およびチケット: http://cakephp.lighthouseapp.com/projects/42648/tickets/2485-model-find-results-are-all-returned-as-string-fields-even-with-int11-fields

これは Cake2.x の既知の問題 (データベースがそれらを返す方法に基づく) であり、新しいデータソースを使用する Cake3 で解決される可能性があります。矛盾があり、見つかったレコード全体に手動でキャストするオーバーヘッドが発生するため、そのようには見えませんが...

ソリューションが見つかるまで、 afterFind コールバックで手動でキャストします。schema() を使用すると、各フィールド タイプを見つけることができます。複数のモデルで使用する場合は、AppModel に入れます。

また、クリーンな方法でジョブを実行するビヘイビアーを作成することもできます。そのため、各モデルで行う必要があるのは次のとおりです。

public $actsAs = array('CastConvert'); //name it whatever you like

影響を受けたくないモデルは、接続しないでください。関連するレコードには注意してください。それもケーキの限界かもしれません。通常は、プライマリ レコードのコールバックのみをトリガーします。そのような場合は、動作コールバックを手動でトリガーしたい場合があります。cast() という名前を付けると、モデルで直接アクセスできます。

$this->Primary-Secondary->cast()

またはsth。

于 2012-08-11T09:27:00.330 に答える