Customer-Model in Plugin erweitern

Hey Leute, wir haben Probleme das Customer-Model in unserem Plugin um eine Beziehung (1-n) zu erweitern. Wir haben versucht Attribute zu benutzen, jedoch können wir unser Problem damit nicht abbilden, da es sich um OneToOne Beziehungen handelt. Die Tutorials (z.B. Schuhgrößen Erweiterung) beschränken sich leider immer auf die Benutzung der Attribute (s_user_attributes). Durch den Unique-Key ist es uns dort nicht möglich einem Kunden ein Attribut mehrfach zuzuweisen. Unser Ziel ist es von uns definierte Attribute einem Kunden mehrfach zuweisen zu können. Beispiel: Man möchte die Lieblingsfarbe des Kunden im Shop hinterlegen. Ein Kunde kann aber mehrere Lieblingsfarben haben. Wir möchten aber keine Lösung, die die maximale Anzahl an Farben beschränkt (Lieblingsfarbe_1, Lieblingsfarbe_2, etc.) sondern eine Lösung, die beliebig viele Farben speichern könnte. Da wir die Werte im Backend anzeigen (und auch speichern können) wollen, müssen die Felder zusammen mit den Kundendaten (automatisch) mitgeladen werden. Vielleicht sehen wir einfach den Wald vor lauter Bäumen nicht. :wtf: Vielen Dank im Voraus André und Timo

Eine 1:n Beziehung kannst du nicht über Attribute abbilden. Hier musst du dir eine eigene Tabelle / ein eigenes model anlegen und die Verknüpfungen bspw. über einen zusätzlichen Reiter in den Kundendetails pflegen. Viele Grüße

Vielen Dank für die schnelle Antwort. Wir haben schon folgendes versucht: 1. Das Query um unsere Felder erweitert (im afterGetDetailQueryBuilder()). $builder-\>addSelect(array( 'oss.sai', 'oss.activationCode' )) -\>leftJoin( 'Shopware\CustomModels\Oss\Oss', 'oss', \Doctrine\ORM\Query\Expr\Join::WITH, 'customer.id = oss.customerId' ); 2. Im Javascript sowohl Model erstellt als auch Detail-View angepasst. Model Ext.define('Shopware.apps.OssConnector.model.Oss', { extend: 'Shopware.data.Model', fields: [{name: 'sai', type: 'string'}, {name: 'activationCode', type: 'string'}], associations: [{ relation: 'ManyToOne', field: 'customerId', type: 'hasMany', model: 'Shopware.apps.Base.model.Customer', name: 'getCustomer', associationKey: 'customer' }] }); Detail-View WIr haben die Standardview überschrieben (override: ‘Shopware.apps.Customer.view.detail.Window’) und einen neuen Tab hinzugefügt. Dieser wird auch korrekt dargestellt (es fehlen nur noch die Daten). Das entsprechende PHP Model samt Beziehung haben wir auch erstellt. /\*\* \* @Assert\NotBlank \* @Assert\Valid \* \* @var \Shopware\Models\Customer\Customer $customer \* @ORM\ManyToOne(targetEntity="Shopware\Models\Customer\Customer") \* @ORM\JoinColumn(name="customerId", referencedColumnName="id") \*/ protected $customer; Im Backend (Javascript) fehlen die Daten unseres erstellen Models. Wir sind uns nicht sicher, woran das genau liegt. Liegt es daran, dass das Customer-Model nichts von unserer erstellten Beziehung weiß (da wir das nicht direkt an das Customer-Model schreiben - den Core wollen wir nicht verändern). Vielleicht ist das PHP-Model falsch? Eventuell ist auch unsere Struktur völlig falsch? Viele Grüße André und Timo

Hallo zusammen, wir haben das Problem jetzt lösen können. André wird dazu noch einen Blogeintrag verfassen, den wir dann hier verlinken. Schönes Wochenende André und Timo

Hallo zusammen, 

habt ihr den Blogbeitrag schon verfasst? Wir stehen vor exakt dem gleichen Problem und kommen leider nicht weiter.

Danke!

LG Max

stehe vor dem gleichen Problem und würde mich auch sehr für die Lösung intressieren.

Wäre nett, wenn ihr dazu noch etwas schreiben könnt.

danke

@runway wo bleibt der verlinkte blogeintrag? ^^

Hallo,

das rein aus Backend-Sicht sollte - behaupte ich jetzt mal mit meinen jugendlichen Leichtsinn - nicht allzu schwierig sein. Laut meines Wissens müsste dafür nur folgendes umgesetzt werden:

  • Doctrine Model schreiben: Für die Farbe, oder besser gesagt für das Attribut. In Doctrine kann man dann eine ManyToMany Beziehung angeben, was den Vorteil hat, dass man sich um die Auflösungstabelle nicht kümmern muss, denn die legt Doctrine dann automatisch an (im Cache).

  • Backend Kundeneinzelansicht um einen Tab oder ähnliches erweitern: ExtJS Model schreiben und die Daten an den richtigen Stellen einlesen (lassen).

 

Aber für mich stellt sich noch eine entscheidende Frage: Wofür braucht man das? Welchen Vorteil hat man davon als Kunde oder besser gefragt, welchen Vorteil hat man davon im Frontend? Das wurde ja bisher noch gar nicht diskutiert.

 

 

MFG

 

derwunner