2014-03-12 40 views
0

我正在使用Cakephp 2.4.5。我有兩個表,一對多的關係。表B屬於表A.HTTP Post應該如何保存模型和關聯的模型數據?

我希望表A中的一個控制器可以保存表A和表B中的記錄。控制器代碼應該很簡單,看起來像這樣;

public function add_tableA($id=null) 
{ 
    if ($this->request->is('post')) 
    { 
     $this->layout = null ; 
     $this->TableA->create();     
     $this->TableA->saveAll($this->request->data, array('deep' => true)); 
    } 
} 

我試圖將正確的HTTP POST格式發送到控制器時出現問題。

我試過HTTP POST下面的數據格式,但是失敗了。

data[TableA][field1] = field1_value 
data[TableA][field2] = field2_value 
data[TableB][field1] = field1_value 
data[TableB][field2] = field2_value 

然後,我嘗試HTTP POST以下的數據格式,至少填寫TableA字段。

data[TableA][field1] = field1_value 
data[TableA][field2] = field2_value 

的HTTP POST數據格式應該如何樣子,如果我想爲這兩個表創建行?

+0

你的表單是怎麼樣的? – skywalker

+0

我沒有使用HTML表單。不使用cakephp視圖。我將純粹將Cakephp用作REST API服務器。我使用python直接發送HTTP Post。這就是爲什麼我需要知道要在HTTP Post中發送的數據格式。 – user781486

+0

我想,你應該使用saveAssociated()而不是saveAll()。檢查其官方網站的數據結構。 –

回答

2

參見:http://book.cakephp.org/2.0/en/models/saving-your-data.html

和舉例saveAssociated:

$data = array(
    'Article' => array('title' => 'My first article'), 
    'Comment' => array(
     array('body' => 'Comment 1', 'user_id' => 1), 
     array('body' => 'Comment 2', 'user_id' => 12), 
     array('body' => 'Comment 3', 'user_id' => 40), 
    ), 
); 

所以,你的情況後像

data[TableA][field1] = field1_value 
data[TableA][field2] = field2_value 
data[TableB][0][field1] = field1_value 
data[TableB][0][field2] = field2_value 
data[TableB][1][field1] = field1_value 
data[TableB][1][field2] = field2_value 
etc 

和:

$this->TableA->saveAssociated($this->request->data); 
+0

已驗證是正確答案。謝謝!! – user781486

1

在奧德r以保存它,就像你需要的那樣:

data[TableB][TableA_id] = 'id of data saved be to TableA'; 

用於保存表B數據。所以我認爲你需要先保存TableA:

$dataA = $this->TableA->save('data for TableA'); 
if (!$dataA) { 
    $data['TableB']['TableA_id'] = $this->TableA->id; 
    $this->TableA->TableB->save('data array for TableB'); 
} 
+0

它可能有效,但它不如其他人給出的答案那樣整齊。但還是非常感謝。 – user781486