5

我对 CakePHP 还很陌生,但到目前为止我觉得它很容易使用。今天我遇到了从数据库导出数据的问题。

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

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

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

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

我尝试在模型中设置 $_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()

或某事。

于 2012-08-11T09:27:00.330 回答