Freitextfeld aus Artikel via Repository lesen

Hallo,

ich hole mir in PHP ein Artikelobjekt wie folgt

/** @var ModelManager $entityManager */
$entityManager = Shopware()->Container()->get('models');

$articleDetailsRepositoy = $entityManager->getRepository(Detail::class);

/** @var \Shopware\Models\Article\Detail $articleDetail */
$articleDetail = $articleDetailsRepositoy->findOneBy(['number' => $itemnumber]);

wie bekomme ich aus diesem Artikelobjekt nun meine Freitextfelder raus? Ich habe leider keinen passenden Getter gefunden…

habe jetzt folgende Dinge ausprobiert:

 

$article->getArticleDetail()->getAttribute()->getAttr1();
$article->getAttribute()->getAttr1();
$article->getArticleDetail()->getAttributes()[‘core’]->get(‘attr1’);
$article->getAttributes()[‘core’]->get(‘attr1’);
$article->getAttr1();
$article->getArticleDetail()->getAttr1();
$article->getAttribute('attr1);
$article->getArticleDetail()->getAttribute(‘attr1’);

 

nichts davon funktioniert! Diese ganzen Methoden sind nicht bekannt oder liefern bei getAttribute() schon NULL … Was mach ich denn falsch?

Was ist denn überhaupt die Ausgabe von $article und wo sind die Attributes? Dump das doch mal.

Hol dir den Artikel bzw. die Attribute eines Artikels doch wie folgt:

        $article = $this->getModelManager()->getRepository( \Shopware\Models\Article\Article::class)->findOneBy(['id' => $id]);
        var_dump($article->getAttribute()->getAttr1());
        die();

 

@Shopwareianer‍

$article ist mein Artikel, das funktioniert denn ich hole mir auch schon Bezeichnungen und Preise aus dem Objekt.

Ich müsste nun nur noch das eine Freitextfeld bekommen…

 $article-\>getAttribute() ist NULL

@FloC3 schrieb:

$article ist mein Artikel, das funktioniert denn ich hole mir auch schon Bezeichnungen und Preise aus dem Objekt.

Ich müsste nun nur noch das eine Freitextfeld bekommen…

Das ist mir schon klar. Aber nochmal: Dump doch mal den Artikel und schau dir die Ausgabe an. Wo sind die Attribute? Sind die protected? Dann hol sie dir über einen getter. Wie man sich die Freitextfelder über das Article Model holt habe ich oben noch beschrieben/editiert. 

Hier nochmal:

$article = $this->getModelManager()->getRepository( \Shopware\Models\Article\Article::class)->findOneBy(['id' => $id]);
var_dump($article->getAttribute()->getAttr1());
die();

 

@Shopwareianer‍

var_dump kann ich leider nicht ausführen, dann stürzt die Einkaufswelt ab (the server responded with a status of 500 (Internal Server Error)… 

aber wie gesagt… $article->getAttribute()->getAttr1() funktioniert nicht, da $article->getAttribute() bereits NULL liefert.

Warum sollten sie protected sein? Das muss doch Shopware-Standardcode sein…

Also ohne var_dump / dump kann man dann ja nur raten …

Ob die EK abschmiert, oder nicht ist ja erst einmal egal. Es geht ja hier nur um’s dumpen. 

Nachdem dump müsstest du vermutlich noch nen die() machen, damit du den dump angezeigt bekommst.

Mit meinen oben genannten Code kommst du in jedem Fall an die Attribute ran.

@Shopwareianer‍

ich hab den var_dump + die() jetzt gemacht. Aber das ergebnis ist genau das, was ich gesagt habe:

 var\_dump($article-\>getAttribute()); --\> NULL

$article an sich kann ich nicht dumpen, da sonst wie gesagt die Seite abstürzt und einen 500 Error bekommt…

@FloC3 schrieb:

@Shopwareianer‍

ich hab den var_dump + die() jetzt gemacht. Aber das ergebnis ist genau das, was ich gesagt habe:

var_dump($article->getAttribute()); –> NULL

$article an sich kann ich nicht dumpen, da sonst wie gesagt die Seite abstürzt und einen 500 Error bekommt…

Aber $article musst du doch dumpen können? Ansonsten weißt du ja garnicht, was drin ist. Dann kann man die ganze Zeit natürlich nur raten, wenn man nicht weiß was drin ist.

Du bekommst auch nen 500er, wenn du danach nen die() machst? Was sagt denn der Server Log zum 500er? Hast du alle Debug Meldungen im FE an, sodass diese dir auch angezeigt werden? 

@Shopwareianer‍

Nein, das lässt sich nicht dumpen. Offensichtlich streikt der Shop, sobald die zu dumpenden Daten etwas größer als ein String sind… Auch mit einem die() direkt danach, kommt ein 500er

Debug-Meldungen sind so konfiguriert:

'front’ => [
        ‚noErrorHandler‘ => false,
        ‚throwExceptions‘ => true,
        ‚disableOutputBuffering‘ => false,
        ‚showException‘ => true,
        ‚charset‘ => ‚utf-8‘
    ],
    ‚phpsettings‘ => [
        ‚display_errors‘ => 1,
    ]

 

EDIT:

habe nun das Laden des Artikels umgestellt auf folgende Logik:

/** @var ContextServiceInterface $contextService */
$contextService = Shopware()->Container()->get(‚shopware_storefront.context_service‘);
$context = $contextService->getShopContext();
/** @var ProductService $productService */
$productService = Shopware()->Container()->get(‚shopware_storefront.product_service‘);
/** @var Product $product */
$product = $productService->get($itemnumber, $context);

echo product->getAttribute(‚core‘)->get(‚attr1‘);

 

das funktioniert jetzt! Offenbar werden bei meiner vorherigen Lademethode keine Attribute geladen…