Ich bekomme einen Fehler von Doctrine, wenn ich eine Eins-zu-viele-Beziehung behalte. Ich habe ähnliche Fragen hier gesehen, aber die Antworten helfen leider nicht. HierDoctrine ArrayCollection mit Eins-zu-Viele löst einen Fehler aus
ist der Fehler:
<b>Fatal error</b>: Uncaught exception 'Doctrine\ORM\ORMInvalidArgumentException' with message 'Expected value of type "Doctrine\Common\Collections\Collection|array" for association field "Entities\Scripts#$ScriptsVersions", got "Entities\ScriptsVersions" instead.' in H:\SERVER\htdocs\10pages\www\php\Vendors\doctrine\orm\lib\Doctrine\ORM\ORMInvalidArgumentException.php:206
Definition:
/**
* @OneToMany(targetEntity="Scripts", mappedBy="ScriptsVersions",cascade={ "persist","remove"})
**/
protected $ScriptsVersions;
Constructor:
public function __construct() {
$this->ScriptsVersions = new \Doctrine\Common\Collections\ArrayCollection();
}
Setter:
public function setScriptsVersions(ScriptsVersions $ScriptsVersions){
if(!$this->ScriptsVersions->contains($ScriptsVersions)){
$this->ScriptsVersions[] = $ScriptsVersions;
$ScriptsVersions->setScripts($this);
}
}
Wenn ich die Klasse von $ this- Dump> ScriptsVersions, nachdem es der Zuordnung, sagt es Doctrine\Common\Collections\Collection
, aber irgendwie bekommt UnityOfWork das Objekt statt der Arraycollection ...
Der Code, den Sie unter "Definition" veröffentlicht haben - ist das auf der 'Scripts' Einheit? Wenn dies der Fall ist, stimmt etwas nicht - "targetEntity" sollte nicht mit der Entität übereinstimmen, auf der die Assoziation definiert ist. Wenn Sie beide Seiten der Assoziation veröffentlichen könnten, wäre das hilfreich. – Will
Oh! Du liegst absolut richtig. Das ist es, das ist der Fehler - nur versehentlich die targetEntity und mappedBy herum geschaltet und es hat sich nicht auf der Bühne der Erstellung der Tabelle von MetaData, aber später in diesem Fehler geführt. Willst du die Antwort für mich einreichen, um richtig zu markieren? –
Großartig, ich habe es getan, danke. – Will