1

非常に大きな extbase 拡張機能を作成していて、いくつかの複雑なフィルター関数を処理する必要があります。純粋な sql のワンライナーになりますが、さまざまな理由で Extbase ORM を使用する必要があります。

演劇の上演についてです。すべてのプレイには複数のパフォーマンスがあり、プレイは集計ルートです。

特定の時間範囲内でパフォーマンスを見つける必要がありますが、それは簡単なことではありません。ただし、カテゴリは親 (プレイ) の子です。プレイの参照をパフォーマンスではなく、プレイで保存します (これは、TCA を選択タイプとして構成する必要があるためです)。

結果を paginator ウィジェットに転送する必要がありますが、これには 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 に答える