0

我正在使用带有 cortex ORM 插件的 fatfree 框架。我正在尝试获取与特定条件匹配的记录数。我的代码:

$group_qry = new \models\system\UserGroup;
$group_qry->load(array('type=?',$name));
echo $group_qry->count(); //always returns 3, i.e total number of records in table

最初我认为这可能是因为过滤不起作用并且它总是获取所有内容,但事实并非如此,因为我验证了它

while(!$group_qry->dry()){
    echo '<br/>'.$group_qry->type;
    $group_qry->next();
}

那么如何获取过滤后实际加载的记录数呢?

4

2 回答 2

1

是的,这部分令人困惑:该count()方法实际上执行了一条SELECT COUNT(*)语句。它采用与方法相同的参数load(),因此在您的情况下:

$group_qry->count(array('type=?',$name));

这不完全是您所需要的,因为它会执行第二个SELECT,这会降低性能。

您需要计算结果数组中的行数。由于这个数组是一个受保护的变量,你需要在UserGroup类中为它创建一个专用函数:

class UserGroup extends \DB\SQL\Mapper {
  function countResults() {
    return count($this->query);
  }
}

如果你觉得这样一个简单的需求有点过头了,你可以提出请求,要求框架来处理它。听起来是一个合理的要求。

更新:

它现在是框架的一部分。所以调用$group_qry->loaded()将返回加载的记录数。

于 2014-03-21T16:35:22.987 回答
0

xfra35 是对的,当使用映射器作为活动记录时,目前没有方法只返回加载的项目。或者你可以只计算集合:

$result = $group_qry->find(array('type=?',$name));
echo count($result); // gives you the number of all found results

此外,我刚刚添加了 countResults 方法,就像建议的那样。谢谢xfra35。

https://github.com/ikkez/F3-Sugar/commit/92fa18130892ab7d2303edc31d2b1f4bba70e881

于 2014-03-21T21:44:40.863 回答