TYPO3 Порядок Extbase по дочерним записям COUNT

У меня есть эта модель:

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

Таким образом, визит показывает, какой FrontendUser получил доступ к каким новостям.

Мне нужно получить все новости для текущего пользователя FrontendUser. Все новости должны располагаться в порядке DESC по свойству datetime, но первыми должны появляться новости, которые еще не посещал авторизованный пользователь.

Это 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
);

но, похоже, это не работает.

Любые идеи?

Спасибо.


person cili    schedule 24.01.2014    source источник


Ответы (1)


На самом деле это невозможно, так как $defaultOrderings ожидает свойства, а не имена полей или функции SQL.

Насколько я знаю, единственная возможность - использовать$query->statement('[YOUR QUERY]');.

person lorenz    schedule 24.01.2014
comment
В этом случае, я думаю, мне не следует слишком надеяться на способ автоматической обработки enableFields, верно? :) - person cili; 24.01.2014
comment
Немного хакерский, но вы можете использовать метод enableFields из ContentObject, если вы не хотите писать эти условия самостоятельно. - person lorenz; 24.01.2014