如果记录不存在,仅将数据保存到数据库 cakephp 3.0
only save data to db if record doesn't exist cakephp 3.0
我有这个简单的控制器操作,它按预期工作。但是,用户可以多次保存相同 post 的赞成票。仅当此 post_id
和 user_id
组合不存在时,我才希望将 $data
保存到数据库中。
public function addUpvote($id = null){
$this->autoRender = false;
if ($this->request->is('ajax')) {
$data = [
'post_id' => $id,
'user_id' => $this->Auth->user('id'),
'value' => 1
];
$upVote = $this->Votes->newEntity($data);
$this->Votes->save($upVote);
}
}
我试过这样做
$data = [
'post_id' => $id,
'user_id' => $this->Auth->user('id'),
'value' => 1
];
$votesTable = TableRegistry::get('Votes');
$exists = $votesTable->exists($data);
if(!$exists){
$upVote = $this->Votes->newEntity($data);
$this->Votes->save($upVote);
}
但这不起作用。即使我让 if $exist 等于 true,$data 也不再保存。
我不确定为什么它没有保存。可能是如上所述的验证错误。
做:
$tmp = $this->Votes->save($upVote);
debug($tmp);
查看为什么保存不起作用。
然后我会使用验证规则来确保用户不能投票两次,我认为这是我的目标。创建一个指定记录不能具有相同 post_id 和 user_id 组合的记录。
看到这个post。
通过使用验证规则,您无需担心检查记录是否已存在,并且可以在可能需要唯一字段组合的其他区域中重复使用它。
我有这个简单的控制器操作,它按预期工作。但是,用户可以多次保存相同 post 的赞成票。仅当此 post_id
和 user_id
组合不存在时,我才希望将 $data
保存到数据库中。
public function addUpvote($id = null){
$this->autoRender = false;
if ($this->request->is('ajax')) {
$data = [
'post_id' => $id,
'user_id' => $this->Auth->user('id'),
'value' => 1
];
$upVote = $this->Votes->newEntity($data);
$this->Votes->save($upVote);
}
}
我试过这样做
$data = [
'post_id' => $id,
'user_id' => $this->Auth->user('id'),
'value' => 1
];
$votesTable = TableRegistry::get('Votes');
$exists = $votesTable->exists($data);
if(!$exists){
$upVote = $this->Votes->newEntity($data);
$this->Votes->save($upVote);
}
但这不起作用。即使我让 if $exist 等于 true,$data 也不再保存。
我不确定为什么它没有保存。可能是如上所述的验证错误。
做:
$tmp = $this->Votes->save($upVote);
debug($tmp);
查看为什么保存不起作用。
然后我会使用验证规则来确保用户不能投票两次,我认为这是我的目标。创建一个指定记录不能具有相同 post_id 和 user_id 组合的记录。
看到这个post。
通过使用验证规则,您无需担心检查记录是否已存在,并且可以在可能需要唯一字段组合的其他区域中重复使用它。