Backend Speicherung von assoziierten Media Objekten

Ich habe im Backend meinen Controller abgebildet welcher unter anderem Bilder ablegt - das funktioniert auch alles - bis auf das speichern von Bilder: 

:
"You're trying to decode an invalid JSON String: ↵Fatal error: Uncaught Doctrine\ORM\ORMInvalidArgumentException: Expected value of type "Shopware\Models\Media\Media" for association field "MEINPLUGIN\Models\Bug#$media", got "array" instead. in /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php:206↵Stack trace:↵#0 /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(844): Doctrine\ORM\ORMInvalidArgumentException::invalidAssociation(Object(Doctrine\ORM\Mapping\ClassMetadata), Array, Array)↵#1 /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(741): Doctrine\ORM\UnitOfWork->computeAssociationChanges(Array, Array)↵#2 /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(803): Doctrine\ORM\UnitOfWork->computeChangeSet(Object(Doctrine\ORM\Mapping\ClassMetadata), Object(MEINPLUGIN\Models\Bug))↵#3 /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(340): Doctrine\ORM\UnitOfWork->computeChangeSets()↵#4 /var/www/shopware533/vendor/doctrine/orm/lib/D in /var/www/shopware533/vendor/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php on line 206↵"

 

In meinem Model nutze ich:

/**
	 * @var
	 * @ORM\OneToOne(targetEntity="Shopware\Models\Media\Media")
	 * @ORM\JoinColumn(name="media_id", referencedColumnName="id", nullable=true)
	 */
	protected $media;

	/**
	 * @var int
	 * @ORM\Column(name="media_id", type="integer", nullable=true)
	 */
	private $mediaId = null;


	/**
	 * @return Media
	 */
	public function getMedia()
	{
		return $this->media;
	}

	/**
	 * @param Media $media
	 */
	public function setMedia($media)
	{
		$this->media = $media;
	}

 

Was mache ich hier falsch?

Wie sehen deine Getter- und Setter-Methoden für $media aus ?

Viele Grüße

@simkli schrieb:

Wie sehen deine Getter- und Setter-Methoden für $media aus ?

Viele Grüße

Die sind oben mit drin, hier nochmal :slight_smile:

 

/**
	 * @return Media
	 */
	public function getMedia()
	{
		return $this->media;
	}

	/**
	 * @param Media $media
	 */
	public function setMedia($media)
	{
		$this->media = $media;
	}

Beste Grüße 

Hallo Misengo,
schau’ mal hier: Backend Components - Associations

Dieser Artikel beschreibt Assoziationen. Beim Produktbeispiel sind die Attribute (protected $attribute; ) ebenfalls eine OneToOne-Assoziation.

Jetzt vergleiche mal deine Setter-Methode mit der aus dem Beispiel :wink:

Viele Grüße

@simkli schrieb:

Hallo Misengo,
schau’ mal hier: https://developers.shopware.com/developers-guide/backend-components/associations/#the-product-model-(\models\product.php)

Dieser Artikel beschreibt Assoziationen. Beim Produktbeispiel sind die Attribute (protected $attribute; ) ebenfalls eine OneToOne-Assoziation.

Jetzt vergleiche mal deine Setter-Methode mit der aus dem Beispiel ;)

Viele Grüße

Hi simkli,

danke für deine Rückmeldung - dann bekomme ich aber 

 

 Uncaught Error: Call to undefined method Shopware\Proxies\ __CG__ \Shopware\Models\Media\Media::setBug() in /var/www/shopware533/engine/Shopware/Components/Model/ModelEntity.php

/**
	 * @return Media
	 */
	public function getMedia()
	{
		return $this->media;
	}

	/**
	 * @param Media $media
	 * @return \Shopware\Components\Model\ModelEntity
	 */
	public function setMedia($media)
	{
		return $this->setOneToOne(
			$media,
			Media::class,
			'media',
			'bug'
		);
	}

 

Ich kann ja keinen setter in das Media Model einbinden. Bin etwas verwirrt.

Ich kann ja keinen setter in das Media Model einbinden. Bin etwas verwirrt.

Ja, das ist richtig. Das kannst du nur bei deinen eigenen Models machen. Daher setzte den letzten Parameter (reference) einfach auf null, bzw. lass‘ ihn weg  Wink

Viele Grüße