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');