【问题标题】:CakePHP 1.3 $this -> save () doesn't execute a queryCakePHP 1.3 $this -> save () 不执行查询
【发布时间】:2011-06-08 15:57:30
【问题描述】:

使用 CakePHP 1.3 我正在尝试将一些数据保存到 MySQL 数据库中。数据不是来自表单,但为了模仿它,我将数据放在 $this -> 数据数组中,如下所示:

$this -> data = Array (
                         'User' => Array (
                                            'last_login' => date ('Y-m-d H:i:s')
                                         )
                      );

这将创建一个看起来与默认 Cake 数据数组完全相同的数组。到目前为止一切顺利。

接下来,我调用如下函数:

if ($this -> User -> save ($this -> data))
{
   echo $this -> User -> id;
}
else
{
   echo 'Save failed';
}

它总是出现“保存失败”,表明数据没有正确保存。我尝试通过多种方式对此进行调试:

我检查了我的用户模型或 AppModel 中是否存在 beforeSave 或 beforeValidate 函数,以及它们是否返回 true。 (他们做到了。)

我在 default.ctp 中回显了$this -> Session -> flash ()。它什么也没说。

我在 default.ctp 中回显了$this -> element ('sql_dump')。我没有看到任何我期望的查询的迹象,这证实了我对查询没有执行而不是失败的期望。

我在控制器中回复了$this -> validationErrors。它是空的,所以验证似乎没问题。

我尝试在我的$this -> data array 中提供正确的索引以进行保存,如下所示:

$this -> User -> save ($this -> data['User']);

我检查了我是否通过$this -> loadModel ('User') 加载了我的用户模型(我做了)。

请注意,我尝试在我的 AppController 中执行此操作(这就是我手动加载模型的原因)。更具体地说:它在 AppController 的 beforeFilter () 函数中。这个函数在我的应用程序拥有的每个其他 Controller 中的 beforeFilter () 函数中调用(我检查了这个)。

目前,我不知道是什么原因造成的。有人对此有任何想法吗?

【问题讨论】:

    标签: php cakephp save cakephp-1.3


    【解决方案1】:

    您没有在保存之前指定用户 ID,因此 CakePHP 不知道要将日期保存到哪一行。实际上,您是在要求 CakePHP 只保存一个日期,而不指定保存位置。我现在离开了我的 webdev 盒子,但我相信这就是你要找的。​​p>

    if( ! isset( $this->User->id ) ) {
        $this->User->create();
    }
    $this->User->saveField('last_login', date(DATE_ATOM));
    

    请参阅this page 了解更多信息。顺便说一句,如果您想按照最初的方式进行操作,我认为是这样:

    if( ! isset( $this->User->id ) ) {
            $this->User->create();
            $myId = $this->User->getLastInsertID();
    } else {
      $myId = $this->User->id;
    }
    
    $this -> data = Array (
          'User' => Array (
          'id' => $myId
          'last_login' => date ('Y-m-d H:i:s')
       )
    );
    
    if ($this -> User -> save ($this -> data))
    {
       echo $this -> User -> id;
    }
    else
    {
       echo 'Save failed';
    }
    

    【讨论】:

    • 我很惭愧我忘记了这一点,因为现在我正在第三次阅读该页面......不幸的是,这并没有解决我的问题。查询仍然没有显示在查询列表中:(
    • 那么,你尝试了这样的事情,然后查看了用户下的mysql表,last_login没有更新? $this -> data = Array ('User' => Array ('id'=1, 'last_login' => date ('Y-m-d H:i:s') ));
    • 既然你只保存一个字段,你试过saveField方法吗? $this->User->saveField('last_login', date(DATE_ATOM));
    • 彼得·诺尔,你是我的英雄。 saveField 与(我忽略的) User -> create () 一起完成了我需要做的事情!您是否可以编辑您的第一个答案以包含 updateField 方法,以便标记为解决方案的答案包含完整的解决方案? :) 谢谢老兄!
    【解决方案2】:

    如果你想更新你的 last_login

    $this->User->id

    $this->User->saveField('last_login', date ('Y-m-d H:i:s'));

    或 如果你保存所有记录,那么你有这种类型的数组,你必须有“id”。

    这个“id”是你通过会话获得的,或者无论如何

    $this -> data = Array ( 'User' => Array ( 'id' => $myId 'last_login' => date ('Y-m-d H:i:s') ) );

    if ($this -> User -> save ($this -> data)) { echo $this -> User -> id; } else { echo 'Save failed'; }

    【讨论】:

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