Extbase查询:父级的棘手访问

时间:2012-05-31 15:50:55

标签: php sql typo3 extbase

我正在编写一个非常大的ex​​tbase扩展,并且必须处理一些复杂的过滤器函数。它将是纯sql中的一个内容,但是,由于各种原因,我必须使用Extbase ORM。

这是关于戏剧表演。每场比赛都有多场比赛,比赛是比赛的根源。

我必须在给定的时间范围内找到表演,这是一个明智的选择。但是,该类别是父母(游戏)的孩子。我不会在演奏中保存播放的参考,而是在播放中(这是因为TCA必须配置为选择类型)。

我必须将结果转发到paginator小部件,这需要QueryResultInterface的一个实例。当我使用play作为聚合根并从那里提取性能时,它返回ObjectStorage并打破小部件。

如果父类别的孩子匹配或者我认为是正确的话,是否有可能限制输出:没有合理的机会?

public function findByTimeRangeInBeginTimeAndAttendCategoryAndStartOfBooking(Datetime $startRange, Datetime $endRange, $category = 'undefined') {

        $query = $this->createQuery();

        $constraints = array();
        $constraints[] = $query->greaterThanOrEqual('timebegin', $startRange->getTimestamp());
        $constraints[] = $query->lessThanOrEqual('timebegin', $endRange->getTimestamp());

        if($category !== 'undefined') {
            $constraints[] = $query->equals('play.category.name', $category);
        }

        $query->matching (
            $query->logicalAnd($constraints)
        );
        $query->setOrderings (
                        Array('timebegin' => Tx_Extbase_Persistence_Query::ORDER_ASCENDING)
        );

        return $query->execute();
}

2 个答案:

答案 0 :(得分:1)

如果没有参考该剧,我认为没有太多机会。我甚至会说你的域模型无法以这种方式工作。你要么作为聚合根播放然后选择播放并从那里去演出,或者表演也有一个存储库,在这个意义上它变成了一个聚合根本身,但是你想要有一个对该剧的引用..

答案 1 :(得分:0)

  

出于各种原因,我必须使用Extbase ORM。   什么原因?你确定你真的需要吗?

它不会解决您的问题,但您应该阅读: http://lists.typo3.org/pipermail/typo3-dev/2011-May/043180.html

我非常喜欢将MVC和ORM带到TYPO3的想法,我自己也在使用Extbase,但如果我必须编写复杂数据库驱动的东西。