Ich bekomme ein DBAL Abfrage nicht mit QueryBuilder hin. Kamm mir Jemand helfen?

 $sql = 'SELECT kma\_looks.id AS look\_id, kma\_looks.active, kma\_looks.title, kma\_looks.subtitle, kma\_looks.description, kma\_looks.image, kma\_looks.video, kma\_looks.product1, kma\_looks.product2, kma\_looks.product3, s\_media.id, s\_media.path FROM kma\_looks LEFT JOIN s\_media ON kma\_looks.image = s\_media.id WHERE kma\_looks.active = 1';

Und wie sehen deine bisherigen Versuche aus?

VIele Grüße

Danke schon mal für deine Antwort.

$em  = Shopware()->Container()->get(‚models‘);
       $builder = $em->createQueryBuilder();

        $builder->select(
            ‚kma_looks.id as look_id‘,
            ‚kma_looks.active‘,
            ‚kma_looks.title‘,
            ‚kma_looks.subtitle‘,
            ‚kma_looks.description‘,
            ‚kma_looks.image‘,
            ‚kma_looks.video‘,
            ‚kma_looks.product1‘,
            ‚kma_looks.product2‘,
            ‚kma_looks.product3‘,
            ‚s_media.id as media_id‘,
            ‚s_media.path as media_path‘
            )
            ->from(‚kma_looks‘, ‚look‘)
            ->leftJoin(‚look‘, ‚s_media‘, ‚ON‘, ‚kma_look.image = s_media.path‘)
            ->where(‚kma_looks.active = 1‘);

        $looks = $builder->execute()->fetchAll();

 

$queryBuilder = Shopware()->Container()->get('dbal_connection');

$sql = "SELECT kma_looks.id AS look_id,
          kma_looks.active,
          kma_looks.title,
          kma_looks.subtitle,
          kma_looks.description,
          kma_looks.image,
          kma_looks.video,
          kma_looks.product1,
          kma_looks.product2,
          kma_looks.product3,
          s_media.id,
          s_media.path
          FROM kma_looks
          LEFT JOIN s_media ON kma_looks.image = s_media.id
          WHERE kma_looks.active = 1";

$looks = $queryBuilder->query($sql)->fetchAll();

 

Das ist zwar am Builder vorbei gearbeitet, aber wenigstens könntest du schonmal weiter machen…
Beim Arbeiten mit dem QueryBuilder hatte ich auch ständig Probleme (vor allem da die Models oft nicht so heißen, wie die Datenbanktabellen…) also bin ich irgendwann dazu übergegangen größere Statements direkt selbst zusammenzubauen…

Normalerweise solltest du das „ON“ aber auch gar nicht brauchen, da die Verbindung ja durch den QueryBuilder erzeugt wird, das würde dann theoretisch so aussehen:

$builder ->select(*)
         ->from('kma_looks', 'look');
         ->leftJoin('s_media', 'media');
         ->where('look.active = 1');

 

1 Like

So habe ich die Abfrage drin, nur wollte ich die Abfrage mit den QueryBuilder machen.

Da funktioniert es auch.

Habe ich gerade noch drunter gepackt wie es mit dem Builder eigentlich aussehen sollte, da hattest du schon geantwortet :wink:

Funktioniert aber auch nur wenn deine Models richtig aufgebaut und die Felder korrekt verknüpft sind, bei „künstlichen“ Joins würde ich selbst die Anleitung nochmal auspacken müssen :confused:

1 Like

Ich glaube da habe ich das mit den Model falsch gemacht.