如何解决如果请求有效载荷中的ID为空,则不会创建BelongsToMany关联
在我的CakePHP(3.5)API中,我想向一个人添加新手机。我的persons
表与belongsToMany
表具有Phones
关联。问题在于,当有效载荷中的电话数据具有空ID时,将不会创建关联。让我详细解释一下:
我从Angular前端致电:
/api/persons/edit/14.json
具有以下请求有效负载(请注意"id": null
):
{
"firstName": "John","lastName": "Doe","identityCard": "24977203","phones": [
{
"id": null,"countryCode": 54,"areaCode": "333","number": "33333333","internalNumber": null,"type": "phone","description": null
}
],"addresses": [],"emails": []
}
在控制器中,如果数据包含patchEntity()
,则"id": null,
不会创建新的关联实体。
Cake book中显示的示例不包含de id字段,但是我想知道是否有一种方法可以告诉id在id为null时创建Cake的新实体。
这是我的简化代码:
PersonsTable.php:
class PersonsTable extends Table {
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('persons');
$this->setPrimaryKey('id');
$this->belongsToMany('Phones',[
'className' => 'Phones','joinTable' => 'persons_phones','saveStrategy' => 'replace',]);
// other associations...
}
}
PersonsController.php:
public function edit($id = null)
{
$person = $this->Persons->get($id,[
'contain' => [
'Addresses','Phones','Emails'
]
]);
if ( $this->request->is(['patch','post','put']) ) {
$data = $this->request->getData();
$person = $this->Persons->patchEntity($person,$data,[
'associated' => [
'Addresses','Emails'
]
]
);
$this->Persons->save($person,[
['associated' => ['Addresses','Emails']]
]);
$errors = $person->getErrors();
$this->set([
'status' => $errors ? 'error' : 'success','message' => $errors ? 'Error message...' : NULL,'data' => [
'errors' => $errors,'person' => $person
]
]);
}
}
PhonesTable.php:
class PhonesTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('phones');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsToMany('Persons',[
'joinTable' => 'persons_phones','foreignKey' => 'phone_id','targetForeignKey' => 'person_id'
]);
}
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmptyString('id','create');
return $validator;
}
}
patchEntity()以空数组形式返回电话。
当我从有效载荷中删除ID时,它会创建实体。此有效负载正常工作,并添加并关联了新的电话行:
{
"firstName": "John","phones": [
{
"countryCode": 54,"emails": []
}
因此,我的问题是:是否可以在belongsToMany关联上允许创建空ID?
作为一个侧面但有趣的注记,当此人已经拥有电话并且有效负载中包括现有电话(具有对应的id)和新电话(具有null id)时,将创建新的实体
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。