Das Paket ComplexQuery Brandbox\Query stellt Funktionen zur Verfügung, die es ermöglichen, mit Doctrine wirtschaftlich und komplex zu arbeiten.
...
Um eine Abfrage mit dem Doctrine Query Builder zu erstellen, beginnen wir mit der Instanziierung des ComplexQueryQuery\Builder
. Dieser stellt die erforderlichen Werkzeuge bereit, um den Query zu konstruieren und zu verarbeiten. Zunächst wird ein spezifischer Builder für die jeweilige Abfrage-Art erstellt, in diesem Beispiel GroupArticleBuilder
GroupArticle
. Dieser spezialisierte Builder enthält dann die Logik und die Struktur der eigentlichen Abfrage. Die Verwendung eines spezifischen Builders ermöglicht eine präzise und übersichtliche Gestaltung der Abfrage, die auf den jeweiligen Anwendungsfall zugeschnitten ist.
Codeblock | ||
---|---|---|
| ||
use Brandbox\Framework\Brandbox\ComplexQueryQuery; $groupArticleBuilder$groupArticle = new Demo\Lib\ComplexQueryQuery\GroupArticleBuilderGroupArticle(); $builder = new ComplexQueryQuery\Builder(); $result = $builder->getIterable($groupArticleBuilder); |
...
Codeblock | ||
---|---|---|
| ||
use Brandbox\Framework\Brandbox\ComplexQueryQuery; use Brandbox\ShopCore\Shop\Group; use Brandbox\ShopCore\Shop\Article; class GroupArticleBuilderGroupArticle extends ComplexQueryQuery\BuilderAbstractQueryAbstract implements ComplexQueryQuery\BuilderInterfaceQueryInterface { public function build(): void { $this ->select( Demo\Lib\Dto\GroupArticle::class, [ 'shopGroup.shopGroupName', 'shopArticle.shopArticleName' ] ) ->from(Group\lib\entity\shopGroup::class) ->joinRelation(Group\lib\entity\shopGroup::class, Article\lib\entity\shopArticle::class) ->joinTranslation( Article\lib\entity\shopArticle::class, Article\lib\entity\translationShopArticle::class, $collationId = 2 ) ->andWhere('translationShopArticle.shopArticleName != \'\'') ->andWhere('shopArticle.shopArticleName LIKE :name') ->orderAsc('shopGroup.shopGroupName') ->orderDesc('shopArticle.shopArticleName') ->noCacheable() ->setFirstResult(0) ->setMaxResults(3) ->setParameter('name', '%Craft%') ; } } |
...