我有这个简单的控制器动作,按预期工作。但是,用户可以多次保存同一帖子的upvote。我希望$data
只有在post_id
和user_id
组合已经存在的情况下才会保存到数据库中。
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 $ exists数量设为true,$ data也不会被保存。
答案 0 :(得分:1)
我不确定为什么不能保存。如上所述可能是验证错误。
执行:
$tmp = $this->Votes->save($upVote);
debug($tmp);
了解为什么保存不起作用。
然后我会使用验证规则来确保用户不能投票两次我认为是目标。创建一个指定记录不能具有相同的post_id和user_id组合。
请参阅此post。
通过使用验证规则,您无需担心检查记录是否已存在,并且您可以在可能需要唯一字段组合的其他区域中重复使用它。