1

我正在编写一个非常大的 extbase 扩展,并且必须处理一些复杂的过滤器功能。这将是纯 sql 中的一个衬里,但是,由于各种原因,我必须使用 Extbase ORM。

这是关于戏剧表演的。每一戏都有多重表演,戏是总根。

我必须在给定的时间范围内找到表演,这很容易。但是,该类别是父级(游戏)的子级。我没有在表演中保存该剧的参考,而是在剧中(那是因为必须将TCA配置为选择类型)。

我必须将结果转发到分页器小部件,这需要 QueryResultInterface 的实例。当我将戏剧用作聚合根并从那里提取表演时,它会返回 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();
}
4

2 回答 2

1

我认为没有参考该剧的机会不大。我什至会说你的域模型不能这样工作。要么您将戏剧作为聚合根,然后选择戏剧并从那里转到表演,要么表演也有一个存储库,从这个意义上说,它本身就是一个聚合根,但是您会想要参考该戏剧。 .

于 2012-05-31T16:14:44.120 回答
0

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

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

我真的很喜欢将 MVC 和 ORM 引入 TYPO3 的想法,而且我自己也在使用 Extbase,但如果我必须编写复杂的数据库驱动的东西,我会选择“常规”的 TYPO3-Extension 或其他框架。

于 2012-06-01T12:18:20.260 回答