关于fatfree框架查询

时间:2017-10-04 16:42:17

标签: 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);
        $this->update();            
    }
}

此功能仅按预期更新所选但不是全部的第一条记录。我做错了什么,或者它是一个错误?

以下查询使用exec函数正常工作:

 UPDATE transactions SET salestemp=0 WHERE active= 1 AND void= 0

2 个答案:

答案 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');
}