wontfixwontfix MemberComments: 185 Received thanks: 33 Member since: June 2015

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: https://developers.shopware.com/blog/2015/10/07/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...

Comments

  • stormerMikestormerMike MemberComments: 38 Received thanks: 10 Member since: October 2018

    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.

    Thanked by 1wontfix
  • wontfixwontfix MemberComments: 185 Received thanks: 33 Member since: June 2015

    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! :D

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

  • timoztimoz MemberComments: 2 Received thanks: 0 Member since: November 2019

    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.

  • wontfixwontfix MemberComments: 185 Received thanks: 33 Member since: June 2015
    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

    Thanked by 1timoz
  • timoztimoz MemberComments: 2 Received thanks: 0 edited November 2019 Member since: November 2019

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

Sign In or Register to comment.