Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

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
languagephp
use Brandbox\Framework\Brandbox\ComplexQueryQuery;

$groupArticleBuilder$groupArticle = new Demo\Lib\ComplexQueryQuery\GroupArticleBuilderGroupArticle();

$builder = new ComplexQueryQuery\Builder();
$result = $builder->getIterable($groupArticleBuilder); 

...

Codeblock
languagephp
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%')
        ;
    }
}

...