我想知道最简洁的方法是实现一个cakephp表单,其中1个控件是多选,其余是文本字段或单选,然后使用saveall()将数据作为多行插入。因此,例如,使用以下值选择表单:
textfield A. 值=富
多数选择B. 值= US,墨西哥,加拿大单身=选择C. 值= 10
所以我想用saveall()将这些行插入数据库: 美孚,美国,10 富,墨西哥,10 富,加拿大,10
现在我知道在添加视图中我可以将这种格式用于输入语句:
输入('Model.0.field1',...)
但我想知道我是否可以在格式相同的输入中混合使用相同的格式 输入( 'Model.field2',...)。
更新: 当我混合并匹配单选和多选控件时,表单数据会像这样提交:
Array
(
[Alert] => Array
(
[schedule_id] => 75
[user_id] => 6
[0] => Array
(
[frequency] => Array
(
[0] => WEEKLY
[1] => MONTHLY
)
)
[limit_value] => .03
[limit_adjustment] => 0
[type] => LIMIT
[disabled] => 0
)
)
我尝试将该数据传递到saveall(),但它将其视为单个记录。
Update2:我认为saveAll()要求将多行数据格式化为:
Array
(
[Article] => Array(
[0] => Array
(
[title] => title 1
)
[1] => Array
(
[title] => title 2
)
)
)
所以看起来在提交之后我将需要一些重组数组的javascript代码。
答案 0 :(得分:0)
我有一些有用的东西......我不确定它是否能充分利用蛋糕的所有“自动化”功能,但我认为它不太复杂。
所以我刚刚将以下代码添加到控制器的添加功能中:
if (!empty($this->data)) {
//debug($this->data, true);
/* begin custom code */
$multiselect = $this->data['Alert']['entity_id'];
$tmp2 = array();
foreach ($multiselect as $item)
{
$tmp = $this->data['Alert'];
$tmp['entity_id'] = $item;
array_push($tmp2,$tmp);
}
$this->data['Alert'] = $tmp2;
debug($this->data,true);
/* end custom code */
$this->Alert->create();
//restructure data
if ($this->Alert->saveAll($this->data['Alert'])) {
$this->Session->setFlash(__('The alert has been saved', true));
//$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The alert could not be saved. Please, try again.', true));
}
并将我的数据转换为:
Array
(
[Alert] => Array
(
[0] => Array
(
[schedule_id] => 74
[entity_id] => 1
[user_id] => 6
[frequency] => HOURLY
[limit_value] => .02
[limit_adjustment] => 0
[type] => LIMIT
[disabled] => 1
)
[1] => Array
(
[schedule_id] => 74
[entity_id] => 2
[user_id] => 6
[frequency] => HOURLY
[limit_value] => .02
[limit_adjustment] => 0
[type] => LIMIT
[disabled] => 1
)
)
)