Attribute Klasse assoziieren mit eigenem Model

Hallo, Wenn ich eine Attribut-Tabelle s_media_attributes per SQL um ein Feld erweitere und dieses als Foreign-Key mit Reference auf den PrimaryKey einer zusätzlichen Tabelle definiere, wird die “Attribut-Klasse” soweit korrekt gecachet, wenn die Model-Klasse zu der zusätzlichen Tabelle unter \Shopware\Models abgelegt und unter dem im Namespace Shopware\Models\ModelName definiert wird. Auch die Assoziation von Attribut-Klasse und eigener Model-Klasse wird durch den ForeignKey “annotiert”. Definiere ich aber die Model-Klasse zur zusätzlichen Tabelle im Namespace Shopware\CustomModels\ModelName in einem Plugin und registriere sie in dem Plugin über afterInit() per registerCustomModels() , erkennt die Attribut-Klasse dieses Model offenbar nicht und die Properties, Getter, Setter etc. werden regelrecht zerschossen: Hier die dynamisch erzeugte Attribut-Klasse “Media” zu s_media_attributes mit zwei zusätzlichen Fremdschlüsseln (zu RmoProject und RmoObjElement) , wobei die Model-Klasse RmoProject in \Shopware\Models abgelegt und unter dem Namespace \Shopware\Models\RmoProject definiert und die Model-Klasse RmoObjElement in \Shopware\Plugins\PluginName\Models\ModelName abgelegt und unter dem Namespace \Shopware\CustomModels\RmoObjElement definiert und über afterInit() per registerCustomModels() registriert wurde. [code]<?php /**

  • Shopware 4
  • Copyright © shopware AG

  • */

namespace Shopware\Models\Attribute;
use Shopware\Components\Model\ModelEntity,
Doctrine\ORM\Mapping AS ORM,
Symfony\Component\Validator\Constraints as Assert;

/**

  • @ORM\Entity

  • @ORM\Table(name=“s_media_attributes”)
    /
    class Media extends ModelEntity
    {
    /
    *

    • @var integer $id
    • @ORM\Id
    • @ORM\GeneratedValue(strategy=“IDENTITY”)
    • @ORM\Column(name=“id”, type=“integer”, nullable=false)
      */
      protected $id;

    /**

    • @var integer $mediaId
    • @ORM\Column(name=“mediaID”, type=“integer”, nullable=true)
      */
      protected $mediaId;

    /**

    • @var integer $rmoProjectId
    • @ORM\Column(name=“projectID”, type=“integer”, nullable=true)
      */
      protected $rmoProjectId;

    // FEHLER: $Id statt $rmoObjElementId
    /**

    • @var integer $Id
    • @ORM\Column(name=“articleID”, type=“integer”, nullable=true)
      /
      protected $Id;
      /
      *
    • @var \Shopware\Models\Media\Media
    • @ORM\OneToOne(targetEntity=“Shopware\Models\Media\Media”, inversedBy=“attribute”)
    • @ORM\JoinColumns({
    • @ORM\JoinColumn(name=“mediaID”, referencedColumnName=“id”)
    • })
      */
      protected $media;

    /**

    • @var \Shopware\Models\RmoProject\RmoProject
    • @ORM\OneToOne(targetEntity=“Shopware\Models\RmoProject\RmoProject”, inversedBy=“attribute”)
    • @ORM\JoinColumns({
    • @ORM\JoinColumn(name=“projectID”, referencedColumnName=“id”)
    • })
      */
      protected $rmoProject;

    // FEHLER: Assoziation $rmoObjElement fehlt

    public function getId()
    {
    return $this->id; } public function setId($id) { $this->id = $id; return $this; } public function getMediaId() { return $this->mediaId; } public function setMediaId($mediaId) { $this->mediaId = $mediaId; return $this; } public function getRmoProjectId() { return $this->rmoProjectId; } public function setRmoProjectId($rmoProjectId) { $this->rmoProjectId = $rmoProjectId; return $this; } // FEHLER: getId statt getRmoObjElementId public function getId() { return $this->id; } // FEHLER: setId statt setRmoObjElementId public function setId($id) { $this->id = $id; return $this; } // FEHLER: redundant und fehlerhaft public function get() { return this-\>; } // FEHLER: redundant und fehlerhaft public function set() { this-\> = ; return $this; } public function getMedia() { return $this->media; } public function setMedia($media) { $this->media = $media; return $this; } // Korrekt public function getRmoProject() { return $this->rmoProject; } public function setRmoProject($rmoProject) { $this->rmoProject = $rmoProject; return $this; } } [/code] RmoProject wird wie die shopware-eigene Klasse Media richtig erkannt und assoziiert, RmoObjElement (via Plugin eingebunden) nicht. Ich könnte Attribute zu s_media_attributes per addAttribute hinzufügen _nachdem_ die eigene Model-Klasse per registerCustomModels registriert wurde, aber 1. weiß ich nicht, ob das das eigentliche Problem löst 2. kann man mit addAttribute keine Assoziationen erzeugen (?) Was ist der Trick hierfür? Und ist Shopware\CustomModels\ModelName der richtige Namespace für die Modelklasse eines Plugins?

Hallo, meine Frage zu oben angeführten Beispiel ist: Kann man Attributen Klassen assoziieren mit eigenen Models?

Mayday… anybody out there? Weil Attribut Klassen dynamisch in den Cache geschrieben werden (mit dem Namen des zugeordneten Models), sind ihre Verknüpfungen schon gesetzt - je nach Fremdschlüsseln der Attribut-Tabelle. Das folgende Beispiel beschreibt das Problem auch nicht, weil hier alle beteiligten Klassen CustomModels sind: Shopware Backend Komponenten - Assoziationen Wie verhält sich also das mit den Assoziationen, wenn man Verknüpfungen zwischen Attribut Klassen und CustomModels schaffen möchte?

Würde mich auch interessieren. hast du bereits eine Lösung für das Problem?