У меня есть эта модель:
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
);
но, похоже, это не работает.
Любые идеи?
Спасибо.