2013-02-03 233 views
0

我試圖拆分出一些JSON字符串以便通過此RestKit的iPhone庫進行解析,但CakePHP正在拆分不兼容的字符串。例如,下面的字符串就是它目前分裂出來:更改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"}}} 

注意的是,玩家的反應應該是問題的一部分。

的方式模型是蛋糕上的設置是'Question' belongs to 'Player'後者hasMany 'Question'

我找告訴蛋糕輸出類似上面的響應#2的正確方法。有什麼建議麼?

回答

0

您可以使用afterFind()回答您的問題模型,以將播放器記錄嵌套在問題記錄中。或者在獲取之後根據需要修改結果數組。 Hash類的各種功能可能會幫助您重新格式化數組。

+0

請謹慎操作。將代碼添加到afterFind()回調將導致用該模型執行的所有查詢的結果都被更改。這可能不是你想要的。我會發布替代 – thaJeztah

+0

你是對的。我應該可能在我的評論中添加了免責聲明。 – ADmad

+0

沒問題,afterFind()*可以*是做這件事的地方,只是爲了防止經驗較少的CakePHP用戶搞砸他們的應用程序,因爲他們不知道它在做什麼:) – thaJeztah

0

您可以將自定義方法添加到您的問題模型中,並以所需的格式返回結果。這將保持您的代碼清潔,並將數據處理/格式化邏輯保留在您的模型中(在大多數情況下應該是這種情況);

例如,你的問題模型中:

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提到,散列工具可能會有所幫助。文檔位於此處:

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html