Warum erscheint im Artikel Backend bei meinem Attribut nur ein NULL und nicht die Daten

Moin,

ich erstelle gerade mein erstes Shopware Plugin und hoffe ihr könnt mir helfen.

Ich habe im Backend unter dem Hauptmenüpunkt “Artikel” ein Punkt “Verkaufsargumente” angelegt.

Dies funktioniert soweit auch einwandfrei:

Nun habe ich im Backend unter den Artikeln ein neues Attribut hinzugefügt:

    private function createArticleAttribute() {
        /** @var CrudService $service */
        $service = $this->container->get('shopware_attribute.crud_service');
        $service->update('s_articles_attributes', 'selling_arguments', TypeMapping::TYPE_MULTI_SELECTION, [
            'label' => 'Verkaufsargumente',
            'entity' => 'SellingArguments\Models\Argument',
            'displayInBackend' => true,
            'custom' => true,
                ]
        );
    }

 

Allerdings spuckt er nun im Backend immer den Wert “null” aus und nicht den der Bezeichnungen (Displayname würde mir reichen).

 

Ich hoffe ihr könnt mir dazu helfen.
Grüße Benjamin

 

Model:

time = new \DateTime();
    }

    public function getId() {
        return $this->id;
    }

    public function getTime() {
        return $this->time;
    }

    public function getCssclassname() {
        return $this->cssclassname;
    }

    public function getDisplayname() {
        return $this->displayname;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function setTime($time) {
        $this->time = $time;
    }

    public function setCssclassname($cssclassname) {
        $this->cssclassname = $cssclassname;
    }

    public function setDisplayname($displayname) {
        $this->displayname = $displayname;
    }

}

Repository:

getQuestionQueryBuilder();
        
     
        return $builder->getQuery();
    }

    public function getQuestionQueryBuilder($articleId)
    {

        $builder = $this->getEntityManager()->createQueryBuilder()
            ->select(['cssclassname', 'displayname'])
            ->from(Argument::class, 'argument')
            ->leftJoin('argument.cssclassname', 'cssclassname')
            ->leftJoin('argument.displayname', 'displayname')
            ->where('article.id = :articleId')
            ->setParameter('articleId', $articleId);

        return $builder;
    }
}

Backend Controller:

 

—=== UPDATE ===—

Ich habe herausgefunden das wenn ich mein Attribut “displayname” einfach mal in “value” umbennen und das Plugin neu installiere der Text angezeigt wird!

Also ist die Frage: Wo ändere ich das Mapping wenn dieser Aufruf kommt?

/backend/EntitySearch/search?model=SellingArguments\Models\Argument

{"success":true,"data":[{"id":1,"time":new Date(1489148800000),"cssclassname":"dfgdgdfg","value":"dsgfdgd"}],"total":1}

Dort muss scheinbar value stehen und nen key möchte er bestimmt auch. Wie bringe ich ihm jetzt bei das er “displayname” als value rauswirft?

Note:  The model must contain minimum one of the following fields to correctly display the item in the backend.

  • label
  • name
  • title
  • number
  • description
  • value

If this is not done, the entry is displayed with the value null and works not properly.

 

Siehe https://developers.shopware.com/developers-guide/attribute-system/#define-own-single-and-multi-selection