保存后如何获取模型数据(CakePHP)

时间:2011-03-22 04:21:38

标签: cakephp

我希望在保存之后从模型中获取最新数据而不进行其他选择。

目前我这样做:

if ($this->Model->save($data)){
    $last = $this->Model->find('first',array(
        'conditions' => array('Model.id' => $this->Model->id)
    );
    $last['Model']['dataChangedByBehaviors']; // <-- data I want
}

我希望获得在模型回调或行为中设置的任何数据,而不执行额外的查找。

4 个答案:

答案 0 :(得分:15)

我不明白为什么人们在做劳动。只需使用getLastInsertId()CakePHP的内置函数就完成了:

$post_id=$this->Post->getLastInsertId();

答案 1 :(得分:11)

您的示例有两种不同的情况:

  • $ data 包含模型数据的完整记录。然后你可以简单地访问 $ data ['Model'] ['dataChangeByBehaviors']
if ($this->Model->save($data)){
      $data['Model']['dataChangeByBehaviors'];  //---- I want get this
}

所以,答案是:你已经掌握了数据。

(注意:如果是新记录, $ data 当然不包含ID,您需要从 $ this-&gt; Model-&gt; id 。如果你在 beforeSave()回调中进行任何更改,这些当然不会反映在你的 $ data 中。

  • $ data 仅包含您在记录中更新的某些字段。除了从数据库中读取之外,没有其他方法可以获得完整的记录 - 这正是您已经在做的事情,可以按照Leo的建议进行简化:
if ($this->Model->save($data)){
      $last = $this->Model->read(null,$this->Model->id);
      $last['Model']['dataChangeByBehaviors'];  //---- I want get this
}

所以答案是:没有数据库请求就无法获取数据。

答案 2 :(得分:5)

如果你正在寻找像 if($ last = $ this-&gt; Model-&gt; save($ data))这样的解决方案,我认为没有这样的事情。< / p>

但是你可以使用findById保存一些代码:

if ($this->Model->save($data)){
      $last = $this->Model->findById($this->Model->id);
}

答案 3 :(得分:0)

你不能只是简单的阅读是最快的

  $last = $this->Model->read(null,$this->Model->id);