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 zus_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?