Cakephp:在此->;中添加条件;型号->;保存()

Cakephp:在此->;中添加条件;型号->;保存(),cakephp,cakephp-2.0,cakephp-2.1,Cakephp,Cakephp 2.0,Cakephp 2.1,我正在处理一个cakephp 2.x。想在我的保存查询中添加一个条件。。例如,我想要实现这个查询 INSERT INTO 'this' where condition is 'this' 现在我正在这样做 $count = $this->Message->find('count', array( 'conditions' => array('Message.mobileNo' => $mobileNo,

我正在处理一个cakephp 2.x。想在我的保存查询中添加一个条件。。例如,我想要实现这个查询

       INSERT INTO 'this' where condition is 'this'
现在我正在这样做

      $count = $this->Message->find('count', array(
                'conditions' => array('Message.mobileNo' => $mobileNo,
                                      'Message.body'=>$body

                )));

            if($count>0){
                echo "already have a message";

             }else
            {
                $this->Message->create();
                $this->Message->save($this->request->data);
            }

有时我会先检查计数,然后保存到数据库中。。。我可以将条件添加到我的保存中吗,这样我就不必为了完成一项任务而在数据库中查询两次了

这不是真正的CakePHP问题,而不是MySQL问题。但是您不能这样做,因为没有条件查询

有两种方法:

  • 正如马克在评论中所说,使用验证。虽然验证只适用于单个字段,但这将非常棘手
  • 在模型中使用beforeValidate()或beforeSave()回调来检查这一点,如果返回false,则不会执行保存操作
  • 您可以将唯一索引放在表中,这样就不允许同时插入phone+消息

  • 我会选择方法2。

    在您的模型中保存方法之前尝试

    您可以更好地使用以下代码:

    $conditions = array('Message.mobileNo' => $mobileNo,
                'Message.body'=>$body);
    if ($this->Message->hasAny($conditions)){
        echo "already have a message";
    }
    else{
        $this->Message->create();
            $this->Message->save($this->request->data);
    }
    

    为什么不在模型中为此使用自定义验证规则?将更加清洁: