Wie greife ich ab 5.2.2 mit ext.js auf eigene Attribute zu?

Hallo zusammen,

wir hatten für Shopware 5.1 ein Plugin entwickelt, dass die Methode getAttributes() verwendete, um auf von uns selbst definierte Attribute zuzugreifen. Wir benutzen ein Object der Klasse Shopware.apps.Order.model.Position. Nach dem Update auf 5.2.2 gibt es die Methode getAttributes() dort nicht mehr. Wie können wir weiterhin auf unsere Attribute zugreifen?

(Offenbar ist in Shopware.apps.Order.model.Position in der Version 5.2.2 folgendes entfallen:)

 

associations: [{ type:'hasMany', model:'Shopware.apps.Order.model.PositionAttribute', name:'getAttributes', associationKey:'attribute' }]

 

Hallo,

die Antwort würde mich auch sehr Interessieren. Die Tabelle dafür existiert auf jedenfall noch.

 @shopware‍ [@Shopware Developer](http://forum.shopware.com/profile/18563/Shopware Developer „Shopware Developer“)‍

Attribute sollen seither ausschließlich über einen eigenend CRUD service fetched bzw persistiert werden:
Attribute system

Bin davon nach wie vor wenig begeistert. Wenn man nicht gerade nur ein neues Feld anlegen will, um dieses dann ausschließlich aus dem Shopware Backend heraus zu pflegen, steht man vor wesentlich mehr Hürden als zuvor. Generiert auch deutlich mehr Boilerplate-Code, ist im Kontext auch inkonsequent nur für diese Entitäten so vorzugehen und verballhornt so ein wenig die Prinzipien von Doctrine ORM.

Hallo Zusammen!

Ich stehe auch grade vor dem Problem, dass ich an die von mir erstellten Attributes nicht dran komme. Ich erstelle diese in der Install-Methode des Plugins.

public function install(InstallContext $context)
{
        /**
         * @var $service \Shopware\Bundle\AttributeBundle\Service\CrudService
         */
        $service = $this->container->get('shopware_attribute.crud_service');
        
        // create article attributes for base fieldset
        $service->update('s_articles_attributes', 'start_date', 'date', [
            'label' => 'Begin',
            'displayInBackend' => false,
            'custom' => false,
        ]);
        
        parent::install($context);
}

Das klappt soweit super. Jetz möchte ich dieses Attribute für eine Abfrage benutzen. Ich habe einen Query Builder erstellt:

public function getArticleListByTimePeriodQueryBuilder($fromDate, $toDate)
{
        $builder = Shopware()->Models()->createQueryBuilder();
        $builder->select(array('article', 'mainDetail', 'attribute'));
        $builder->from('Shopware\Models\Article\Article', 'article')
            ->leftJoin('article.mainDetail', 'mainDetail')
            ->leftJoin('mainDetail.attribute', 'attribute')
            ->where('attribute.start_date BETWEEN :from AND :to')
            ->setParameters(array(
                'from' => $fromDate,
                'to' => $toDate,
            ));
        
        return $builder;
}

Wenn ich nun diese Methode aufrufe bekomme ich den folgenden Fehler:

[Semantical Error] line 0, col 181 near ‘start_date’: Error: Class Shopware\Models\Attribute\Article has no field or association named start_date in vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 63

Wie gehe ich nun da vor?

Ich muss das Thema nochmal aufgreifen, ich habe nämlich ein ähnliches Problem: Unser Plugin legt ebenfalls Freitextfelder an - dies führt jedoch dazu, dass das SwagImportExport-Plugin beim Export von Produkten einen Fehler wirft: [Semantical Error] line 0, col 2783 near ‚nnwebcustomtab7‘: Error: Class Shopware\Models\Attribute\Article has no field or association named nnwebcustomtab7

Hat hier viellecht jemand eine Idee?

Hallo,

das klingt nach einem Cache - Problem. Ich würde in deinem Fall einmal empfehlen, das Artikel - Model über die Freitextfeld-Verwaltung einfach mal neu generieren zu lassen.

Sollte es danach funktionieren, würde ich nach dem Erstellen der Freitextfelder beim Plugin folgendes noch ergänzen:

$metaDataCache = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl();
$metaDataCache->deleteAll();

Shopware()->Models()->generateAttributeModels(
    array('s_articles_attributes')
);

Beste Grüße

Sebastian