无脂框架 - 从查询中加载数据数组

时间:2017-03-05 22:30:49

标签: php orm fat-free-framework

使用F3的ORM从我的数据库加载唯一记录没有问题。但是,当我想要检索多个记录以进行显示或处理时,load方法仍然只会获取它找到的第一个记录。

我发现了on the docs

  

默认情况下,数据映射器的load()方法仅检索第一个   符合指定条件的记录。如果你有多个   满足与加载的第一个记录相同的条件,您可以使用   用于导航的skip()方法

然而,文档继续只显示如何使用内置的find方法操作多个记录,该方法返回一个填充了对数据库条目的引用的对象。

我不想每次都循环浏览多个记录,我认为必须有一些我缺少的东西,如何用无脂肪做到这一点?在文档中,它甚至引用了代码,您可以在简单的DB调用之后执行以下操作,但我还没有看到如何使用提供的方法执行此操作:

<repeat group="{{ @result }}" value="{{ @item }}">
    <span>{{ @item.brandName  }}</span>
</repeat>

获取一批记录的正确方法是什么?有关示例,请参阅以下内容:

$productList = $products->load(array('created_on >= ?', $date->timestamp)); //Load most recently created products

$productList = $products->find(array('created_on >= ?',$date->timestamp),array('order'=>'created_on'));

在上面的示例中,日期使用Carbon,假设这是一个合适的时间戳。

1 个答案:

答案 0 :(得分:1)

我不认为有一种正确的方式来检索一堆记录。 SQL映射器充当游标。查看其工作原理的最佳方法是使用load方法:映射器将检索所有匹配的记录并将其焦点设置在第一个上。你可以用它做你想做的事情,然后打电话给next继续下一个:

$products->load(array('created_on >= ?', $date->timestamp));
while (!$products->dry() ) {
    // Do something with the record
    $products->next();
}

find方法将返回一个记录数组(实际上它们也是游标,但每个只有一个记录,因此您可以将它们视为映射到记录的对象)。在这里,您需要像在示例中一样将结果分配给新变量:

$productList = $products->find(array('created_on >= ?',$date->timestamp),array('order'=>'created_on'));
// You can loop over the array to get some info or update the records:
foreach ($productList as $product) {
    // Do something with the record
}

或者您可以直接在模板中使用$productList变量:

<repeat group="{{ @productList }}" value="{{ @item }}">
    <span>{{ @item.brandName  }}</span>
</repeat>