2017-03-05 35 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