伙计们,我正在使用CakePHP,并且遇到了一个与获取我在DB中设置的最近更新的标志有关的问题。
这是代码
$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作业是并行运行的,因为它们根本没有得到inpress=1。
然而,如果我使用PHPMyAdmin手动检查记录,inprocress标志会立即变为1,但不知何故,它将无法用于下一个http调用。
知道吗?
为什么不直接使用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);