Php 关于无脂肪框架查询

Php 关于无脂肪框架查询,php,mysql,fat-free-framework,Php,Mysql,Fat Free Framework,我对无脂肪框架中的更新查询有这种奇怪的感觉 public function updateTransactionSalesFlush() { $this->load(array('active=1 AND void=0')); if (!$this->dry()) { $data = array('salestemp' => 0); $this->copyFrom($data); $t

我对无脂肪框架中的更新查询有这种奇怪的感觉

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

默认情况下,数据映射程序的
load()
方法仅检索与指定条件匹配的第一条记录。如果有多条记录满足与加载的第一条记录相同的条件,则可以使用
skip()
方法进行导航:

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()

当然,如果要更新大量记录,最好通过
exec()
方法执行单个
UPDATE
语句:

public function updateTransactionSalesFlush() {

    $this->db->exec('UPDATE '.$this->table.' SET salestemp=0 WHERE active=1 AND void=0');
}

thx,现在已经很清楚了,但是使用skip()metod迭代所有记录来更新它似乎非常无用。是否使用exec()方法要好得多??这可能是一个改进的好主意。
update
方法可以选择接受一个过滤器,就像
remove
方法一样。然后它需要两个参数:过滤器和键/值对。我最初想使用对象的属性作为键/值对,但这不一定是直观的,而且它对像
key1=key2+1
这样的表达式不起作用。因此,尽管我讨厌香草SQL的想法,但我必须承认,使用数据映射器进行操作太棘手了。
public function updateTransactionSalesFlush() {

    $this->db->exec('UPDATE '.$this->table.' SET salestemp=0 WHERE active=1 AND void=0');
}