Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp 更新归属关联数据_Cakephp_Cakephp 3.x - Fatal编程技术网

Cakephp 更新归属关联数据

Cakephp 更新归属关联数据,cakephp,cakephp-3.x,Cakephp,Cakephp 3.x,我正在设置一个表单,用于更新person和相关的person\u-to-u-role表,person\u-to-u-role是一个中间表,以n..n关系将person链接到role角色有一个预定义的角色列表,不应在个人范围内修改 我只需要更新person\u to\u role表中的role\u id和description,并添加/删除记录 SQL 人形模型 公共函数初始化(数组$config) { 父::初始化($config) 人员控制器->编辑() 但更新失败,出现以下错误: 无法保存此

我正在设置一个表单,用于更新
person
和相关的
person\u-to-u-role
表,
person\u-to-u-role
是一个中间表,以n..n关系将
person
链接到
role
<代码>角色有一个预定义的角色列表,不应在个人范围内修改

我只需要更新
person\u to\u role
表中的
role\u id
description
,并添加/删除记录

SQL 人形模型 公共函数初始化(数组$config) { 父::初始化($config)

人员控制器->编辑() 但更新失败,出现以下错误:

无法保存此人。请重试

protected $_accessible = [
    '*' => true,
    'ID' => true
];
它要求提供
person\u to\u role.person\u id
这是外键(它应该知道当前的person id),并需要
role.name
的值。 我把我的联系搞错了吗?谢谢你的帮助

更新2017-08-20 仍然不行,尝试了文档和其他互联网资源的所有可能变体。目前,我能够通过
保存
操作的验证,但生成了
插入
查询,而不是
更新
,并在唯一约束冲突时出错

我有
person.ID
person\u to\u role.ID
可访问:

[
  'NICK_NAME' => '',
  'FIRST_NAME' => 'test',
  'MIDDLE_NAME' => '',
  'LAST_NAME' => 'user',
  'BIRTH_DATE' => '1996-10-01',
  'GENDER' => 'Male',
  'role' => [
    (int) 0 => [
      '_joinData' => [
        'ID' => '153',
        'DESCRIPTION' => 'test edited text'
      ],
      'ID' => '2'
    ]
  ]
]
我的帖子数据如下所示:

INSERT INTO person_to_role (PERSON_ID, ROLE_ID, DESCRIPTION) 
VALUES (129, 2, 'test edited text')
我尝试了这两种方法,使用和不使用
个人到角色
\u joinData
中记录ID,结果相同:

$this->belongsTo('Person');
$this->belongsTo('Role');

在尝试不同的方法(包括使用)时,我将以下几行添加到我的
persontroletable.php
模型中:


注释完这些之后,一切正常,我能够保存更新以及在联接表中添加新记录和删除现有记录。

在尝试不同的方法(包括使用)时,我在我的
personotroletable.php
模型中添加了以下行:


注释完这些之后,一切正常,我可以保存更新以及在联接表中添加新记录和删除现有记录。

Standard CakePHP BelongTomany希望联接表只包含相关记录的ID。如果您想在此表中存储其他数据,我想您可能有兴趣使用“通过"选项:@Szymon我刚刚按照说明尝试使用“through”模型,但实体属性
角色
为空,因此我返回到上面问题中显示的内容。Standard CakePHP BelongToMany希望您的联接表只包含相关记录的ID。如果您想在该表中存储其他数据,我认为您可以在使用“through”选项时休息:@Szymon我只是按照指示尝试使用“through”模型,但实体属性
角色
为空,所以我返回到上面问题中显示的内容。
'NICK_NAME' => 'Johny',
    'FIRST_NAME' => 'John',
    'MIDDLE_NAME' => 'J.',
    'LAST_NAME' => 'Smith',
    'BIRTH_DATE' => '1961-01-01',
    'GENDER' => 'Male',
    'role' => [
        (int) 0 => [
            '_joinData' => [
                'ID' => '1',
                'ROLE_ID' => '5',
                'DESCRIPTION' => 'person role description'
            ]
        ]
    ]
]
  Array
  (
  [role] => Array
  (
    [0] => Array
    (
      [NAME] => Array
      (
        [_required] => This field is required
      )

      [_joinData] => Array
      (
        [PERSON_ID] => Array
        (
          [_required] => This field is required
        )
      )
    )
  )
)
protected $_accessible = [
    '*' => true,
    'ID' => true
];
[
  'NICK_NAME' => '',
  'FIRST_NAME' => 'test',
  'MIDDLE_NAME' => '',
  'LAST_NAME' => 'user',
  'BIRTH_DATE' => '1996-10-01',
  'GENDER' => 'Male',
  'role' => [
    (int) 0 => [
      '_joinData' => [
        'ID' => '153',
        'DESCRIPTION' => 'test edited text'
      ],
      'ID' => '2'
    ]
  ]
]
INSERT INTO person_to_role (PERSON_ID, ROLE_ID, DESCRIPTION) 
VALUES (129, 2, 'test edited text')
$this->belongsTo('Person');
$this->belongsTo('Role');