2017-03-05 36 views
0

我没有问题使用F3的ORM从我的数据库加载唯一记录。但是,当我想要检索多个记录以进行显示或处理时,加载方法仍然只能获取它找到的第一个记录。无脂框架 - 从查询中加载数据列表

我发现这个on the docs

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

然而,文档再继续只显示如何操作多条记录与建在find方法中,它返回一个填充了对数据库条目的引用的对象。

我不喜欢每次循环播放多个记录,我认为肯定会有一些我错过的东西,如何用fat free做到这一点?在文档甚至引用代码,在那里你可以做一个简单的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

我不认为有一个正确的方式来检索一堆记录。 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> 
+0

我看到的,所以无论是一个需要遍历所有记录。在我的情况 - 因为我想显示一个表,我将需要将它们保存到另一个变量,然后将其发送到模板引擎...似乎有点钝,但嘿,我想它的工作! =) – Shackrock

+1

我不认为你需要循环记录。 'find'方法返回一个可以直接在模板中使用的数组。检查更新的答案。 – george007

+0

是的,你是对的,我试过,但当然,如果我在我的模板中输入'productlist'而不是'productList',我会遇到一些问题!谢谢你的帮助。 – Shackrock