HTTP Post如何保存模型和关联的模型数据?

时间:2014-03-12 09:11:50

标签: php cakephp post http-post cakephp-2.0

我正在使用Cakephp 2.4.5。我有2个表与一对多的关系。表B属于表A.

我希望表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数据格式应该如何?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

为了保存它,你需要:

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

表示要保存的TableB数据。所以我认为你需要先保存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');
}