int列在CakePHP中作为字符串从DB中提取

时间:2012-08-11 09:01:31

标签: php mysql cakephp cakephp-2.1

我是CakePHP的新手,但到目前为止我发现它很容易使用。 今天我遇到了从数据库导出数据的问题。

我将我的一个模型导出为JSON。 一切都很顺利,除了我注意到CakePHP将id列导出为字符串。该模型在mysql中定义为int。 我已经在JSON输出和模型中检查了 -

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

并且在模型中,id也被定义为字符串。

这与依赖于JSON输出的其他系统混淆,后者用于获取整数作为ID。

我尝试在模型中设置$ _schema属性,但这并未改变任何内容。

感谢您的帮助。

谢谢, 丹

1 个答案:

答案 0 :(得分:5)

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()

或某事。