Json 改变CakePHP关联模型的方式

Json 改变CakePHP关联模型的方式,json,cakephp,restkit,Json,Cakephp,Restkit,我试图拆分一些JSON字符串,以便被这个iPhone库解析,但是CakePHP拆分出一个不兼容的字符串。例如,下面的字符串就是它当前拆分出来的字符串: 1. {"Question":{"id":"1","content":"Test","player_id":"1","points":"0","votes":"0","created":"0000-00-00 00:00:00"},"Player":{"id":"1","username":"player_test"}} 我需要像这样的东西:

我试图拆分一些JSON字符串,以便被这个iPhone库解析,但是CakePHP拆分出一个不兼容的字符串。例如,下面的字符串就是它当前拆分出来的字符串:

1. {"Question":{"id":"1","content":"Test","player_id":"1","points":"0","votes":"0","created":"0000-00-00 00:00:00"},"Player":{"id":"1","username":"player_test"}}
我需要像这样的东西:

2. {"Question":{"id":"1","content":"Test","player_id":"1","points":"0","votes":"0","created":"0000-00-00 00:00:00","Player":{"id":"1","username":"player_test"}}}
请注意,玩家的回答应该是问题的一部分

模型在蛋糕上的设置方式是
“问题”属于“玩家”
,后者
有许多“问题”


我正在寻找一种正确的方法,告诉Cake输出类似上面的响应2的内容。有什么建议吗?

您可以使用问题模型的
afterFind()
回调将播放器记录嵌套在问题记录中。或在获取后根据需要修改结果数组。类的各种函数可能会帮助您重新格式化数组。

您可以向问题模型添加自定义方法,以所需格式返回结果。这将使您的代码保持干净,并保持模型中的数据处理/格式化逻辑(在大多数情况下应该是这样)

例如,在您的问题模型中:

public function getQuestionsForPlayer($playerId)
{
    $results = $this->find('all', array(
        'fields' => array(/* fields */),
        'conditions' => array(/* ..... */
        /* etc */
    ));

    // Process your result to be in the right format
    // Hash::extract() and other Hash:: methods
    // may be helpful here as @ADmad mentioned

    return $processedResult;
}
正如ADmad提到的,散列实用程序可能会有所帮助。文档位于此处:


执行此操作时要非常小心。将代码添加到afterFind()回调将导致使用该模型执行的所有查询的结果发生更改。这可能不是你想要的。我会发布一个备选方案,你是对的。我可能应该在我的评论中添加这一免责声明。没问题,afterFind()可以是这样做的地方,只是为了防止经验不足的CakePHP用户因为不知道它在做什么而弄乱他们的应用程序:)