我有
模型管理员分别添加所有用户和部分。一旦添加了这些,我希望管理员选择该部分并在section_users中添加其中的所有用户
我有一个选择输入,其中多个设置为true。如何以cakephp的方式保存这些数据以及验证。
<?php echo $this->Form->input("section_id"); ?>
<?php echo $this->Form->input("user_id", array('multiple'=>'checkbox')); ?>
这会生成
Array
(
[section_id] => 1
[user_id] => Array
(
[0] => 3
[1] => 4
)
)
我知道我可以循环并转换为此并使用saveAll或saveMany但是cakephp方式/正确方法是什么。
Array
(
[0] => Array
(
[section_id] => 1
[user_id] => 3
)
[1] => Array
(
[section_id] => 1
[user_id] => 4
)
)
答案 0 :(得分:2)
正如已经提到的,这在文档中是开明的,请阅读它们,如果你不理解它们(这是可以理解的,因为HABTM部分有点令人困惑,需要一些试验和错误),告诉我们你究竟遇到了什么问题。
<强> http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm 强>
根据显示的示例,将多个X保存到Y的格式应为
Array
(
[Section] => Array
(
[id] => 1
)
[User] => Array
(
[User] => Array(3, 4)
)
)
相应的表格可能如下所示:
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('Section.id'); ?>
<?php echo $this->Form->input('User', array('multiple' => 'checkbox')); ?>
<?php echo $this->Form->end('Add Users'); ?>
数据将通过Section
模型保存,这样就可以正确更新其modified
列。
public function addUsersToSection($id) {
// ...
if($this->request->is('post')) {
if($this->Section->save($this->request->data)) {
// ...
} else {
// ...
}
} else {
$options = array(
'conditions' => array(
'Section.' . $this->Section->primaryKey => $id
)
);
$this->request->data = $this->Section->find('first', $options);
}
$users = $this->Section->User->find('list');
$this->set(compact('users'));
}
另一种方法是重组数组,如Vinay Aggarwal所示,效果很好,唯一的区别是它需要通过连接模型进行保存,因此它不会更新Section
模型{{ 1}}列。
答案 1 :(得分:0)
CakePHP具有saveMany
功能,如documentation中所述:
Model::saveMany(array $data = null, array $options = array())¶
答案 2 :(得分:0)
这是 HABTM 关系,首先您需要在SectionUser
模型中设置关系。然后,您可以使用saveAll()
方法一次保存所有记录。
Array
(
[0] => Array
(
[user_id] => 33
[section_id] => 9
)
[1] => Array
(
[user_id] => 33
[section_id] => 10
)
)
确保您的数据阵列采用上述格式。
$this->SectionUser->saveAll($data);