【问题标题】:Saving data from hasMany and belongsTo从 hasMany 和 belongsTo 保存数据
【发布时间】:2015-06-15 09:27:21
【问题描述】:

我目前在使用 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。 知道有什么问题吗?

编辑:我也得到相同的结果 $this->请求->数据 代替 $这个->数据 当我创建分配有 2 个作者的新角色时,我的数据如下所示:

array(
    'Role' => array(
        'name' => 'test',
    ),
    'Author' => array(
        'id' => array(
            (int) 0 => '1',
            (int) 1 => '3'
        )
    )
)

感谢您的帮助。

【问题讨论】:

  • 您使用的是什么版本的 CakePHP?从您的代码看起来是 CakePHP 1.x?
  • @drmonkeyninja,Nop,2.2.3 版
  • 您不应该在 CakePHP 2.x 的控制器中使用 $this->data(在 CakePHP 1.x 中就是这样做的),而应使用 $this->request->data。发布表单数据后,$this->request->data 的外观如何?你能用这个更新你的问题吗?
  • 刚刚编辑过,但请求没有变化->数据:(
  • 您确定您发布的数据是您从视图表单中获得的数据吗?因为您的数据格式不正确,无法进行多次保存。从文档中,它说 hasmany 关联模型必须在没有模型键的情况下将其数据放在数字索引数组中

标签: cakephp cakephp-2.2


【解决方案1】:

首先您的保存数据格式不正确。您不能将 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)。 (我确信有一种更优雅的编写方式,只是一些简单的示例代码)。

【讨论】:

  • 好吧,它真的不能正常工作,因为如果我更新角色,并删除所有作者,它不会自动更新作者表:/ 没有办法使用 CakePHP 函数或什么的?
  • 为什么要删除所有作者?
  • 通过删除,我想说“取消链接”与角色关联的所有作者。从技术上讲,Author 表中的 role_id 应该自动设置为 0
  • @NH3 不确定我是否遵循您的要求。您是说如果您更改角色,那么当前与其关联的任何作者都将被分离,并且作者在关联的表单提交中传递?例如。对于特定角色,如果在保存之前您有作者 A、B 和 C,但在更改角色之后您想要 B 和 C 以使 A 不再具有角色。
  • 是的,就是这样,我的角色有作者 A、B、C,我希望当我编辑只有作者 A 和 C 的角色时,作者 B 将取消与角色的链接( role_id = 0)
猜你喜欢
  • 2021-11-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多