如果记录不存在,仅将数据保存到数据库 cakephp 3.0

only save data to db if record doesn't exist cakephp 3.0

我有这个简单的控制器操作,它按预期工作。但是,用户可以多次保存相同 post 的赞成票。仅当此 post_iduser_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

通过使用验证规则,您无需担心检查记录是否已存在,并且可以在可能需要唯一字段组合的其他区域中重复使用它。