添加记录时,我允许用户标记所需的复选框:
echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));
并将选定的索引存储到我的bd上的字符串字段而没有问题。 (它节省了例如1,2,3)
但是,在编辑该记录时,复选框不会被填充 - 选择 - 正确。 (基于字符串文本,例如,1,2,3
如何让checkboxex反映在db上存储为字符串的值?
我的编辑视图使用与添加视图相同的内容:
echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));
* * 更多细节
添加新记录时,我将select中的选项内插到我的数据中:
$this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']);
保存已编辑的记录时也是如此。
问题是在线检索,如何将字符串翻译成我的us_roles输入?
echo $this->Form->input('us_roles', array('label' => 'Roles:', 'type'=> 'select', 'multiple'=>'checkbox','options' => $arr_pr_role));
你能帮忙吗?
---更新,修复---
public function edit($id = null) {
$this->User->id = $id;
if (!$this->User->exists()) {
throw new NotFoundException(__('Invalid user'));
}
if ($this->request->is('post') || $this->request->is('put')) {
$this->request->data['User']['us_roles'] = implode(",", $this->request->data['User']['us_roles']);
if ($this->User->save($this->request->data)) {
...
} else {
$this->request->data = $this->User->read(null, $id);
$this->request->data['User']['us_roles'] = explode(",", $this->request->data['User']['us_roles']);
}
答案 0 :(得分:0)
现在我明白了...... 你正在寻找与implode()相反的东西。 那会爆炸()。
或者您可以使用字符串类(http://book.cakephp.org/2.0/en/core-utility-libraries/string.html#String::tokenize):
$array = String::tokenize($string, ',');
应该为您提供值数组。
但请相信我,通常有更好的方法。 你可以使它成为另一个db表+模型。您可以使用ArrayDatasource,您可以使用一些像我一样的bitmasked解决方案(http://www.dereuromark.de/2012/02/26/bitmasked-using-bitmasks-in-cakephp/)。 最后一种方法的优点是,当您具有额外表格的全部功能时,您仍然只使用单个字段(以及非常小的空间):完全搜索NOT,AND,OR,...