sql query für varianten bilder

kennt jemand die sql query um artikel bilder zu holen, MIT richtige varianten bilder?
oder irgendwelche hinweise wie bilder in datenbank an varianten artikeln zugeordnet werden?

gibt es ne bessere dokumentation als das hier: What is an item? ?

wieso? die shopware feed (produktexport) feature ist zu langsam und hungrig für mein boss, daher soll ich diese mit sql queries bauen…

Die Shopware-Core Dateien sind hier immer ein gutes Nachschlagwerk wenn es die Dokumentation nicht hergibt.

In der Datei engine/Shopware/Models/Article/Repository.php (über engine/Shopware/Core/sArticles.php in sGetArticlePictures()) gefunden) gibt es die Funktion getVariantImagesByArticleNumberQueryBuilder() die nahe an deiner Anforderung sein sollte da man alle Joins sieht die gemacht werden. Kannst dir die Query loggen, selber das SQL nachbauen oder meinen Vorschlag unten mit dem Profiler wählen.

    /**
     * Helper function to create the query builder for the "getVariantImagesByArticleNumberQuery" function.
     * This function can be hooked to modify the query builder of the query object.
     *
     * @param $number
     *
     * @return \Doctrine\ORM\QueryBuilder
     */
    public function getVariantImagesByArticleNumberQueryBuilder($number)
    {
        $builder = $this->getEntityManager()->createQueryBuilder();

        $builder->select([
            'imageParent.id',
            'imageParent.articleId',
            'imageParent.articleDetailId',
            'imageParent.description',
            'imageParent.path',
            'imageParent.main',
            'imageParent.position',
            'imageParent.width',
            'imageParent.height',
            'imageParent.extension',
            'imageParent.parentId',
            'attribute.attribute1',
            'attribute.attribute2',
            'attribute.attribute3',
        ])
            ->from('Shopware\Models\Article\Image', 'images')
            ->innerJoin('images.articleDetail', 'articleDetail')
            ->innerJoin('images.parent', 'imageParent')
            ->leftJoin('imageParent.attribute', 'attribute')
            ->where('articleDetail.number = ?1')
            ->setParameter(1, $number)
            ->orderBy('imageParent.main', 'ASC')
            ->addOrderBy('imageParent.position', 'ASC');

        return $builder;
    }

Alternativ dazu könntest du dir auch das Profiler-Plugin installieren da dort in der Debug-Toolbar - wenn ich mich nicht täusche - alle SQL’s in Reinform (wie diese abgesetzt wurden) angezeigt werden.

1 „Gefällt mir“

hab die profiler völlig vergessen! jou, der zeigt die puren sql queries und dank deine tip mit getVariantImagesByArticleNumberQueryBuilder konnte ich die richtige query in profiler finden. danke fürs graben! :smiley:

shopware export braucht bei unsere ~13k artikeln über 15minuten (hab da abgebrochen) und mein pure sql/php script ~10 sekunden…

Hey @wontfix‍, kannst du den relevanten Teil deines SQL-Skripts hier in dem Thread teilen? Ich bin schon eine ganze Weile heute auf der Suche nach einer Lösung für genau dieses Problem und ich bin grade echt am Verzweifeln.

SELECT
media.path
FROM
s_articles_img image
INNER JOIN s_media media ON image.media_id = media.id
INNER JOIN s_articles_img childImage ON childImage.parent_id = image.id
INNER JOIN s_articles_details variant ON variant.id = childImage.article_detail_id
LEFT JOIN s_media_attributes mediaAttribute ON mediaAttribute.mediaID = image.media_id
LEFT JOIN s_articles_img_attributes imageAttribute ON imageAttribute.imageID = image.id
INNER JOIN s_media_album_settings mediaSettings ON mediaSettings.albumID = media.albumID
WHERE
childImage.article_detail_id = :articleDetailsId
ORDER BY
imageAttribute.attribute1 DESC,
image.main ASC,
image.position ASC

und füttere die gewünschte articleDetailsId

1 „Gefällt mir“

Danke! Funktioniert perfekt! Ich habe nur die letzten drei Joins weggelassen, da ich diese nicht brauche. Oder übersehe ich etwas?