【发布时间】:2017-07-11 13:11:48
【问题描述】:
我无法修改用于保存关联表之一的逻辑。 这两个表是:
- 客户
- ClientMetadatas(使用键/值对存储客户端元数据)
在客户端控制器中,方法edit(),经典,用cakephp烘焙,另外还有关联的表:
$client = $this->Clients->get($id, [
'contain' => ['ClientMetadatas']
]);
if ($this->request->is(['patch', 'post', 'put'])) {
$client = $this->Clients->patchEntity($client, $this->request->data);
if ($this->Clients->save($client, ['associated' => ['ClientMetadatas']])) {
$this->Flash->success(__('The client has been saved.'));
} else {
$this->Flash->error(__('The client could not be saved. Please, try again.'));
$this->response->statusCode(500);
$client=$client->errors();
}
}
$this->set(compact('client'));
$this->set('_serialize', ['client']);
我如何编辑客户端及其元数据的一个示例是调用'/clients/edit/clientid.json'
{
"firstname": "John",
"firstname": "Smith",
"client_metadatas":
[
{
"name": "test",
"value": "test"
}
]
}
这是我的问题:我想验证是否不存在具有此 client_id 和元数据名称的元数据。如果它存在,我会执行更新而不是插入。
似乎理想的解决方案是直接在模型中进行。
我尝试使用回调方法:
- beforeSave(),但我无法修改实体
- beforeFind(),但我无法修改查询
关于如何在保存实体之前正确进行验证以及在插入/更新之间切换的任何建议?
PS:我希望没有信息丢失。如果是这样,请不要犹豫,我会添加它们...
谢谢!
【问题讨论】:
标签: php cakephp orm model cakephp-3.0