我目前在使用cakephp时遇到了一些麻烦。 我已经尝试在这个论坛上找到答案,但在我的案例中没有什么真正有用的:( 这是我的问题:
我有2张桌子:
Author | Role
id | id
role_id | name
我设置了我的作者“belongsTo Role”和我的角色“HasMany Author”
在我看来,我的表单看起来像这样:
$this->Form->create('Role')
$this->Form->input('name'));
$this->Form->input('Author.id', array('type' => 'select', 'multiple' => true, 'options' => $authors));
我的角色控制器:
function index() {
if (!empty($this->data)) {
if ($this->Role->saveAll($this->data)) {
}
}
$this->set('authors', $this->Role->Author->find('list'));
}
但是当我尝试保存时,我的新角色创建得很好,但它也创建了一个新的作者行,而不是更新现有的。 我想要的是,当我创建一个新角色时,从Author表中更新role_id。 知道什么是错的吗?
编辑:我也得到了相同的结果 $这 - >请求 - >数据 代替 $这 - >数据 当我创建一个分配了2个作者的新角色时,我的数据看起来像这样:
array(
'Role' => array(
'name' => 'test',
),
'Author' => array(
'id' => array(
(int) 0 => '1',
(int) 1 => '3'
)
)
)
感谢您的帮助。
答案 0 :(得分:0)
首先,您的保存数据格式不正确。您不能将Author.id
设置为数组,它需要一个整数,因此不会更新现有数据。
不是100%确定这会起作用,但尝试重写保存数据,如下所示: -
$authorIds = Hash::extract($this->request->data, 'Author.id.{n}');
foreach ($authorIds as $authorId) {
$authors[] = [
'id' => $authorId
];
}
$data = [
'Role' => $this->request->data['Role'],
'Author' => $authors
];
然后使用$this->Role->saveAll($data)
。 (我确信有更优雅的方式来编写这个,只是一些快速的示例代码)。