如果记录不存在cakephp 3.0,则只将数据保存到db

时间:2015-04-10 09:37:35

标签: cakephp cakephp-3.0

我有这个简单的控制器动作,按预期工作。但是,用户可以多次保存同一帖子的upvote。我希望$data只有在post_iduser_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也不会被保存。

1 个答案:

答案 0 :(得分:1)

我不确定为什么不能保存。如上所述可能是验证错误。

执行:

$tmp = $this->Votes->save($upVote);
debug($tmp);

了解为什么保存不起作用。

然后我会使用验证规则来确保用户不能投票两次我认为是目标。创建一个指定记录不能具有相同的post_id和user_id组合。

请参阅此post

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