从hasMany和belongsTo保存数据

时间:2015-06-15 09:27:22

标签: cakephp cakephp-2.2

我目前在使用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'
        )
    )
)

感谢您的帮助。

1 个答案:

答案 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)。 (我确信有更优雅的方式来编写这个,只是一些快速的示例代码)。