【问题标题】:TYPO3 Extbase order by child records COUNTTYPO3 Extbase order by child records COUNT
【发布时间】:2014-01-24 10:50:55
【问题描述】:

我有这个模型:

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

So Visit 显示哪个 FrontendUser 访问了哪个新闻。

我需要获取当前登录的 FrontendUser 的所有新闻。 所有新闻应按“日期时间”属性排序,但首先应显示登录用户尚未访问的新闻。

这是给出正确结果的 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
);

但它似乎不起作用。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: count sql-order-by typo3 children extbase


    【解决方案1】:

    这实际上是不可能的,因为 $defaultOrderings 需要属性,而不是 SQL 字段名称或函数。

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

    【讨论】:

    • 在这种情况下,我想我不应该对自动处理 enableFields 的方法抱太大希望,对吧? :)
    • 有点hacky,但如果您不想自己编写这些条件,可以使用 ContentObject 中的 enableFields 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2012-05-06
    • 2014-10-21
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多