CakePHP+MySQLで、数値型カラムの結果を文字列ではなく数値で取得する

CakePHPのRequestHandlerComponentでJsonViewを返す際、型の指定ってできないのかな?integerで受け取りたいんだけど、stringになってる。
2013-08-22 13:46:14
フォーラムでも同じようなことがあがってるな。 cakephp と angularjs http://t.co/Ft1gHDPRtM
2013-08-22 13:49:46
へー、CakePhp-Backbone-Pluginなんてものがあるのか。コンポーネントがパッケージされてる。よくやるJSONの加工なんかが書かれてるみたい。 https://t.co/WaM7o6CHtM
2013-08-22 14:13:20
ビューファイルを作って、intval()してみたんだけど、JSONは、stringのままだなー。うーん、どうすればいいんだろうか。
2013-08-22 17:00:14
JSON云々じゃなくて、$this->model->find('all')の結果が、そもそもstringになっちゃってるな。
2013-08-22 17:36:24
見つけた。これかなー? int型の列がDBから文字列として引き出されているのは、既知の問題なのか。チケットも上がってる。 int columns are pulled as string from DB in CakePHP http://t.co/MwWJ8uNsot
2013-08-22 17:43:49
解決策が見つかるまで、afterFindコールバックで手動キャストするよう指南してある。CakePHP3.xで修正されるかもしれないってことらしい。(公式回答ではない)
2013-08-22 17:47:36
@mawatarin PDOの問題かも。PHP5.3のMySQL NDってのを使えば解決するかも http://t.co/F0QWnQisFt
2013-08-22 18:06:15
@cakephper 提供いただいた情報をもとに試してみましたが、状況変わらずでした。mysqlndに関しては、php5.4からはデフォルトで入ってるみたいです。 http://t.co/BvniAI54jz phpinfoでも有効になっているのを確認しましたが、ダメでした。
2013-08-22 22:21:35
@cakephper 取り急ぎ、状況報告まで。もうちょっと掘り下げてみたり、別のやり方がないか探してみます。ありがとうございました。
2013-08-22 22:23:56
@cakephper 追伸です。 素のPHP(PDO, mysqli)でセレクトしてみても、int(11)はstringで出てきました。 フレームワーク側でうまいことやってくれたりしないかなと思いFuelPHP(PDO)でも試してみましたが、結果は同じでした。
2013-08-23 09:49:01
@mawatarin PDOのコンストラクタのフラグオプションで、PDO::ATTR_EMULATE_PREPARES => falseをセットするとintで返ってきました。
2013-08-23 11:50:27
@cakephper おお。それは助かります。僕もCakePHPでRESTful APIを作ってBackbone.jsと連携させる方法をブログにまとめます。
2013-08-23 12:13:31
先ほど知ったPDO::ATTR_EMULATE_PREPARESについて調べてみたんだけど、これは面白いな。セキュリティ面でも、このアトリビュートについて知っておかないといけないことがある。ググっても1万件弱しか情報が出てこないんだけど、もっと知られるべきだ。
2013-08-23 12:46:44