2014-01-24 83 views
2

我有這樣的模式:TYPO3 Extbase爲了通過子記錄COUNT

News -> 1:n -> Visit 
News -> m:n -> FrontendUserGroup 
FrontendUser -> 1:n -> Visit 

所以訪問表明其FrontendUser進行訪問的消息。

我需要獲取當前登錄的FrontendUser的所有消息。 所有新聞都應該通過「datetime」屬性命令DESC,但首先應該顯示尚未被登錄用戶訪問的新聞。

這是給了我正確的結果在SQL:

SELECT 
    (SELECT COUNT(*) FROM tx_xxnews_domain_model_visit v WHERE v.news = n.uid AND v.fe_user = fu.uid) AS visits, 
    n.* 

FROM tx_xxnews_domain_model_news AS n 
    JOIN tx_xxnews_news_frontendusergroup_mm nfg ON n.uid = nfg.uid_local 
    JOIN fe_users fu ON FIND_IN_SET(nfg.uid_foreign, fu.usergroup) 

WHERE fu.uid = 2271 # logged in user id 

ORDER BY visits ASC, n.datetime DESC 

有沒有什麼辦法讓這個結果與Extbase?

我想在此NewsRepository:

protected $defaultOrderings = array(
    'COUNT(visits)' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING, 
    'datetime' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING 
); 

,但它似乎並沒有工作。

任何想法?

謝謝。

回答

3

這實際上是不可能的,因爲$ defaultOrderings需要屬性,而不是SQL字段名稱或函數。

據我所知,唯一的可能是使用$query->statement('[YOUR QUERY]');

+0

在這種情況下,我想我不應該希望有太多方法來自動處理enableFields,對吧? :) – cili

+0

有點不好意思,但是如果你不想自己寫這些條件,你可以使用ContentObject的enableFields方法。 – lorenz