REST API (Shop) erweitern

Hallo zusammen.

Ich versuche gerade die Shop API zu erweitern da ich viele Infos mit einem Request erhalten will. So sind neben den Shop Infos, Kategorien + Kindkategorien und deren Produkte enthalten. Funktioniert auch alles wunderbar soweit. Ich will den Output aber sehr schlank halten da ich nur wenige Informationen für Categorien und Produkte benötige. Leider schaffe ich es eben nicht nur ausgewählte Merkmale auszugeben. Es funktioniert immer nur mit dem gesamten Model. Hier mein Code:
 

    public function getList($offset = 0, $limit = 25, array $criteria = [], array $orderBy = [])
    {
        $this->checkPrivilege('read');

        $builder = $this->getRepository()->createQueryBuilder('shop')
            ->select('shop', 'category', 'children', 'article')
            ->leftJoin('shop.category', 'category')
            ->leftJoin('category.children', 'children')
            ->leftJoin('children.articles', 'article');

Das führt zu folgendem Output:

[0] => Array
        (
            [id] => 3
            [mainId] => 
            [categoryId] => 11
            [name] => Teststore
            [title] => Teststore
            [position] => 1
            [host] => testshop.de
            [basePath] => 
            [baseUrl] => 
            [hosts] => 
            [secure] => 
            [templateId] => 24
            [default] => 
            [active] => 1
            [customerScope] => 
            [category] => Array
                (
                    [sortingIds] => 
                    [hideSortings] => 
                    [facetIds] => 
                    [id] => 11
                    [parentId] => 1
                    [streamId] => 
                    [name] => Store
                    [position] => 1
                    [metaTitle] => 
                    [metaKeywords] => 
                    [metaDescription] => 
                    [cmsHeadline] => 
                    [cmsText] => 
                    [active] => 1
                    [template] => 
                    [productBoxLayout] => image
                    [blog] => 
                    [path] => 
                    [external] => 
                    [externalTarget] => 
                    [hideFilter] => 
                    [hideTop] => 
                    [changed] => 2019-01-15T14:57:36+0100
                    [added] => 2012-08-27T22:28:52+0200
                    [mediaId] => 
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [sortingIds] => 
                                    [hideSortings] => 
                                    [facetIds] => 
                                    [id] => 15
                                    [parentId] => 11
                                    [streamId] => 
                                    [name] => Kindkategorie
                                    [position] => 2
                                    [metaTitle] => 
                                    [metaKeywords] => 
                                    [metaDescription] => 
                                    [cmsHeadline] => 
                                    [cmsText] => 
                                    [active] => 1
                                    [template] => 
                                    [productBoxLayout] => 
                                    [blog] => 
                                    [path] => |11|
                                    [external] => 
                                    [externalTarget] => 
                                    [hideFilter] => 
                                    [hideTop] => 
                                    [changed] => 2019-01-14T12:47:23+0100
                                    [added] => 2019-01-14T12:47:23+0100
                                    [mediaId] => 
                                    [articles] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => 4
                                                    [mainDetailId] => 4
                                                    [supplierId] => 1
                                                    [taxId] => 4
                                                    [priceGroupId] => 
                                                    [filterGroupId] => 
                                                    [configuratorSetId] => 
                                                    [name] => Mein Artikel
                                                    [description] => 
                                                    [descriptionLong] => Meine Artikelbeschreibung
                                                    [added] => 2019-01-15T00:00:00+0100
                                                    [active] => 1
                                                    [pseudoSales] => 0
                                                    [highlight] => 
                                                    [keywords] => 
                                                    [metaTitle] => 
                                                    [changed] => 2019-01-15T15:03:06+0100
                                                    [priceGroupActive] => 
                                                    [lastStock] => 
                                                    [crossBundleLook] => 0
                                                    [notification] => 
                                                    [template] => 
                                                    [mode] => 0
                                                    [availableFrom] => 
                                                    [availableTo] => 
                                                )

                                        )


                                )

                        )

                )

        )

 

Wunschausgabe wäre aber folgende:

[0] => Array
        (
            [id] => 3
            [mainId] => 
            [categoryId] => 11
            [name] => Teststore
            [category] => Array
                (
                    [id] => 11
                    [parentId] => 1
                    [changed] => 2019-01-15T14:57:36+0100
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 15
                                    [parentId] => 11
                                    [name] => Kindkategorie
                                    [position] => 2
                                    [active] => 1
                                    [changed] => 2019-01-14T12:47:23+0100
                                    [added] => 2019-01-14T12:47:23+0100
                                    [mediaId] => 
                                    [articles] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => 4
                                                    [changed] => 2019-01-15T15:03:06+0100
                                                )

                                        )


                                )

                        )

                )

        )

So habe ich es probiert. Leider ohne Erfolg.

        $builder = $this->getRepository()->createQueryBuilder('shop')
            ->select('shop','category', 'children', 'article.id as article_id', 'article.changed as article_changed')
            ->leftJoin('shop.category', 'category')
            ->leftJoin('category.children', 'children')
            ->leftJoin('children.articles', 'article');

 

Die Informationen werden zwar ausgeliefert aber sind nicht mehr im Fluss sondern am Ende angefügt. Was mache ich falsch?

 

Beste Grüße
Mike

Du könntest vor dem ausliefern nur die felder die du benötigst raus plucken:

http://php.net/manual/de/function.array-column.php

 

Hallo Mike,

versuch es mal hiermit:

 ->select('shop','category', 'children')
 ->addSelect('partial article.{id,changed}')

 

1 „Gefällt mir“

@MrMDeluxe‍ Held! Funktioniert einwandfrei! Wünsch dir ein tolles Wochenende :wink: