如何在CakePHP中插入多个表单数据作为数据库中的新行

时间:2015-05-06 07:47:30

标签: php mysql cakephp

我使用Jquery Clone添加更多表单来填充数据。然后我想在一个新的数据库行中单独添加表单的所有数据。数据库表将是.ex。根据我的阵列。

name | author | category
 ABC    2         1
 XYZ    2         1
 PQR    5         2 

我的数组

Array
(
    [Book] => Array
        (
            [name] => Array
                (
                    [0] => ABC
                    [1] => XYZ
                    [2] => PQR
                )

            [author] => Array
                (
                    [0] => 2
                    [1] => 2
                    [2] => 5
                )

            [category] => Array
                (
                    [0] => 1
                    [1] => 1
                    [2] => 2
                )

        )

)

3 个答案:

答案 0 :(得分:3)

生成名称为 -

的表单字段
echo $this->Form->input('Book.0.name');
echo $this->Form->input('Book.1.name');
echo $this->Form->input('Book.0.author');
echo $this->Form->input('Book.1.author');

然后你会得到像 -

这样的数据
array(
  'Book' => array(
     0 => array(
      'name' => 'xxx',
      'author' => 'yyy',
     ),
     1 => array(
      'name' => 'aaa',
      'author' => 'bbb',
     )
  )
)

然后saveMany()将正确使用它们。

答案 1 :(得分:3)

您必须将数据保存为saveAll兼容格式,如此

array(
'Book' => array(
 0 => array(
  'name' => 'xxx',
  'author' => 'yyy',
 ),
 1 => array(
  'name' => 'aaa',
  'author' => 'bbb',
 )
)
)

你可以通过改变你的jquery clone传递的数据来做到这一点。这样的事情。注意:未经测试

$data = array();
$names = Hash::extract($jquerycloneData,'Book.name');//array(ABC,XYZ,PQR);
$authors = Hash::extract($jquerycloneData,'Book.author');
$categories = Hash::extract($jquerycloneData,'Book.category');
$i=0;

for($i, $i<count($names) ,$i++){

   $data['Book'][$i]['name'] = $names[$i]; 
   $data['Book'][$i]['author'] = $authors[$i];
   $data['Book'][$i]['category'] = $categories[$i];
   }

然后只需在您的图书模型中调用saveAll

$this->saveAll($data);

假设您的数据以上面提供的格式到达

答案 2 :(得分:2)

$this->Book->saveAll($this->request->data);

$this->Book->saveAll($this->request->data, array('deep' => true));