【问题标题】:Cakephp : add condition in this->Model->save()Cakephp : 在 this->Model->save() 中添加条件
【发布时间】:2013-07-02 13:30:49
【问题描述】:

我正在开发一个 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);
            }

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

【问题讨论】:

标签: cakephp cakephp-2.0 cakephp-2.1


【解决方案1】:

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

有两种方法:

  1. 正如 Mark 在评论中所说的使用验证。验证虽然适用于单个字段,但执行起来会非常棘手。
  2. 在模型中使用 beforeValidate() 或 beforeSave() 回调来检查这一点,如果它们返回 false,则不会执行保存操作。
  3. 您可以将 UNIQUE 索引放入您的表中,这样就不会允许将电话+消息插入在一起。

我会选择方法 2。

【讨论】:

    【解决方案2】:

    在你的模型中尝试beforeSave 方法

    【讨论】:

      【解决方案3】:

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

      $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);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多