我正在编写一个非常大的extbase扩展,并且必须处理一些复杂的过滤器函数。它将是纯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();
}
答案 0 :(得分:1)
如果没有参考该剧,我认为没有太多机会。我甚至会说你的域模型无法以这种方式工作。你要么作为聚合根播放然后选择播放并从那里去演出,或者表演也有一个存储库,在这个意义上它变成了一个聚合根本身,但是你想要有一个对该剧的引用..
答案 1 :(得分:0)
出于各种原因,我必须使用Extbase ORM。 什么原因?你确定你真的需要吗?
它不会解决您的问题,但您应该阅读: http://lists.typo3.org/pipermail/typo3-dev/2011-May/043180.html
我非常喜欢将MVC和ORM带到TYPO3的想法,我自己也在使用Extbase,但如果我必须编写复杂数据库驱动的东西。