我有这个型号:
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
);
但它似乎不起作用。
有什么想法吗?
谢谢。
答案 0 :(得分:3)
实际上这是不可能的,因为$ defaultOrderings需要属性,而不是SQL字段名称或函数。
据我所知,唯一的可能是使用$query->statement('[YOUR QUERY]');
。