伙计我正在使用CakePHP,并且遇到了与我在数据库中设置的最新更新标志相关的问题。
这是代码
$this->loadModel('Setting');
$s=$this->Setting->find('first');
if($s['Setting']['inprogress']==1)
{
echo "still working...";
exit;
}
$s['Setting']['inprogress']=1;
$this->Setting->Save($s);
//// Some code that is using db table and process data for like 30-40 seconds
$s['Setting']['inprogress']=0;
$this->Setting->Save($s);
exit;
此代码由cron作业运行,检查是为了确保下一个cron作业在第一个完成之前不会触摸数据。但显然cron工作并行运行,因为他们根本没有获得进展= 1。
但是,如果我使用PHPMyAdmin手动检查记录,inprogress标志立即变为1,但不知何故它不能用于下一个http调用。
有什么想法吗?
答案 0 :(得分:0)
为什么不使用 saveField ?
所以,而不是
$s['Setting']['inprogress']=1;
$this->Setting->Save($s);
你可以
$this->Setting->saveField('inprogress', 1);
或更好,确保,如果在您保存的设置模型上完成其他查找,则可以执行
$id = $s['Setting']['id'];
$this->Setting->id = $id;
$this->Setting->saveField('inprogress', 1);