如何在 CakePHP 中插入多个表单数据作为数据库中的新行
How to Insert multiple Form Data in CakePHP as new row in database
我使用 Jquery 克隆来添加更多表单来填充数据。然后我想在新的数据库行中单独添加表单的所有数据。数据库 table 将 be.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
)
)
)
生成名称类似于 -
的表单域
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()
将与它们正常工作。
$this->Book->saveAll($this->request->data);
或
$this->Book->saveAll($this->request->data, array('deep' => true));
您必须将您的数据放入像这样的 saveAll 兼容格式
array(
'Book' => array(
0 => array(
'name' => 'xxx',
'author' => 'yyy',
),
1 => array(
'name' => 'aaa',
'author' => 'bbb',
)
)
)
您可以通过转换 jquery 克隆传递的数据来做到这一点。像这样的东西。注:未测试
$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];
}
然后只需在您的 Book 模型中调用 saveAll
$this->saveAll($data);
假设您的数据以您上面提供的格式到达
我使用 Jquery 克隆来添加更多表单来填充数据。然后我想在新的数据库行中单独添加表单的所有数据。数据库 table 将 be.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
)
)
)
生成名称类似于 -
的表单域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()
将与它们正常工作。
$this->Book->saveAll($this->request->data);
或
$this->Book->saveAll($this->request->data, array('deep' => true));
您必须将您的数据放入像这样的 saveAll 兼容格式
array(
'Book' => array(
0 => array(
'name' => 'xxx',
'author' => 'yyy',
),
1 => array(
'name' => 'aaa',
'author' => 'bbb',
)
)
)
您可以通过转换 jquery 克隆传递的数据来做到这一点。像这样的东西。注:未测试
$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];
}
然后只需在您的 Book 模型中调用 saveAll
$this->saveAll($data);
假设您的数据以您上面提供的格式到达