2013-12-17 70 views
0

我有一個正常的extbase擴展。Extbase在查詢/資源庫中添加計算字段

在控制器中我得到我的所有記錄:

$stuff = $this->jobRepository->findAll(); 
$this->view->assign('stuff', $stuff); 

,並在模板中我展示他們:

<f:for each="{stuffs}" as="stuff"> 
{stuff.title} <br /> 
{stuff.category} 
</f:for> 

現在我需要一個新的領域stuff.isnew與價值1如果記錄是最新的類別。

爲一個SQL語句將如下所示:

SELECT j2.isnew, j.* FROM `tx_stuff_domain_model_stuff` as j 
left join 
    (SELECT max(crdate) as crdate, category, 1 as isnew FROM `tx_stuff_domain_model_stuff` group by category) as j2 
    on j.crdate=j2.crdate and j.category=j2.category 

(如果我有寫我自己的查詢,我將不得不檢查刪除,隱藏,開始時間,結束時間,以檢查記錄主動權現在)

我現在的問題是,什麼是最乾淨/最好的方式添加到我的擴展?

回答

0

我的解決方案是在作業存儲庫中實現方法findAll。它會首先使用父類中的方法findAll來獲取所有作業。通常的限制已經被應用。然後它會走出最後的工作並標記最新的工作。

它應該也可以創建一個自定義查詢來達到你的目標,但這可能是一個更多的工作。

+0

我有一個自定義的做到了現在查詢。我不知道如何添加自己創建的字段(isnew)。也許我必須用getter和setter將它添加到模型中? - 完全沒關係,因爲我只需要這個字段用於初始排序,所以我不需要前端的值,因爲我可以用isnew字段排序SQL語句。 – nbar

0

其實你並不需要在所有使用額外的查詢......而它始終是新的第一條記錄,你可以用iteratorfor的視圖助手:

<f:for each="{stuffs}" as="stuff" iteration="iterator"> 

    <f:if condition="{iterator.isFirst}">THIS ONE IS BRAND NEW STUFF! </f:if> 

    {stuff.title} <br /> 
    {stuff.category} 
</f:for>