2011-03-22 82 views
9

我想从模型中获取最新的数据,而不需要再进行另一次选择。如何在保存后获取模型数据(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 
} 

我想这是在模型回调或行为设置而不进行额外的找到任何数据。

+0

您能澄清一下,我真的不明白你在问什么。 – Brian 2011-03-22 04:30:42

+1

我想在上面的例子中获取像$ last这样的数据,不需要选择数据库。 – meotimdihia 2011-03-22 04:33:04

+0

请再次检查这个问题和答案。我觉得它仍然不清楚。而且就像它是前一段时间一样,你是在解决问题的同时解决了问题,还是你的解决方案/选择是什么? – hakre 2012-12-28 11:36:33

回答

5

如果你正在寻找一些像这样的解决方案if($ last = $ this-> Model-> save($ data)),我认为没有那样的东西。

但是你可以用节省一些代码findById:

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

你不能,但一个简单的读取速度最快

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

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

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

所以,这里的答案是:你已经拥有的数据。

(注:如果它是一个新的记录,$数据当然会不包含的ID,你需要从$这个 - >型号 - > ID而得到,如果你正在在任何更改。 beforeSave()回调,这些当然不会反映在您的$ data)。

  • $ data只包含您在记录中更新的某些字段。那么有没有其他办法可以从数据库中读取它得到完整的记录,除了 - 这是你已经在做的事情和建议的狮子座可以简化为:
if ($this->Model->save($data)){ 
     $last = $this->Model->read(null,$this->Model->id); 
     $last['Model']['dataChangeByBehaviors']; //---- I want get this 
}

所以这里的答案:没有数据库请求的情况下无法获取数据。

+0

最具说明性的答案! – 2012-05-13 14:25:43

14

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

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

欢迎来到Stack Overflow!感谢您发布您的答案!请务必仔细阅读[自助推广常见问题](http://stackoverflow.com/faq#promotion)。另请注意,每次链接到您自己的网站/产品时,您都必须*发布免责声明。 – 2012-12-26 11:10:36