我在胖子框架中有更新查询这种奇怪的东西
public function updateTransactionSalesFlush() {
$this->load(array('active=1 AND void=0'));
if (!$this->dry()) {
$data = array('salestemp' => 0);
$this->copyFrom($data);
$this->update();
}
}
此功能仅按预期更新所选但不是全部的第一条记录。我做错了什么,或者它是一个错误?
以下查询使用exec函数正常工作:
UPDATE transactions SET salestemp=0 WHERE active= 1 AND void= 0
答案 0 :(得分:1)
https://fatfreeframework.com/3.6/databases
默认情况下,数据映射器的
load()
方法仅检索与指定条件匹配的第一条记录。如果您有多个符合与加载的第一个记录相同的条件,则可以使用skip()
方法进行导航:
答案 1 :(得分:1)
load()
方法加载符合指定条件的所有记录,但一次只映射一个记录。
然后,您需要使用next()
或skip()
方法浏览记录集。
您的代码仅更新第一条记录,因为它缺少循环。以下是修复方法:
public function updateTransactionSalesFlush() {
$this->load(array('active=1 AND void=0'));
while (!$this->dry()) {
$this->salestemp=0;
$this->update();
$this->next();
}
}
或者,您可以调用find()
方法而不是load()
:
public function updateTransactionSalesFlush() {
$records=$this->find(['active=1 AND void=0']);
foreach ($records as $record) {
$record->salestemp=0;
$record->update();
}
}
当然,如果您要更新大量记录,最好通过UPDATE
方法执行单个exec()
语句:
public function updateTransactionSalesFlush() {
$this->db->exec('UPDATE '.$this->table.' SET salestemp=0 WHERE active=1 AND void=0');
}