Ich bemerkte einige seltsame Dinge mit Doctrine ORM ArrayCollection
in einer PostgreSQL-Datenbank (mit diesem in einem Symfony 3-Projekt).Doctrine ORM ArrayCollection in PostgreSQL
Nehmen Sie meine User
Klasse mit Rollen, Es wird mit einer Standardrolle ROLE_USER
initiiert und muss vom Typ array
sein.
class User implements UserInterface, Serializable
{
/**
* @var ArrayCollection
*
* @ORM\Column(name="roles", type="array")
*/
private $roles;
public function __construct()
{
$this->roles = new ArrayCollection();
$this->roles->add('ROLE_USER');
}
}
Dies wird in der Datenbank wie folgt gespeichert.
O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:53:"
, die einen Serialization
Fehler geben wird, wenn sie als User
anmelden versuchen, weil eindeutig Teil des ArrayCollection
in der Datenbank fehlt.
Nach googlen für eine Lösung bin ich auf this Github issue gestoßen. Wie ich es verstehe, ist es ein Fehler und Sie können die ArrayCollection
in einer PostgreSQL
Umgebung nicht verwenden.
Nicht den Typ in der @ORM\Column
Tag zu definieren hilft auch nicht, es speichert dann Folgendes in der Datenbank und Symfony
kann nicht damit arbeiten, um Rollen abzurufen. Doctrine\Common\Collections\[email protected]
Und mit simple_array
oder json
als Typ nicht zurück ein Objekt so beide
Hat jemand eine Abhilfe oder Lösung geht gar nicht für das? Ich beginne wirklich zu bereuen Wechsel von MySQL
zu PostgreSQL
HINWEIS: Der Code funktionierte gut in MySQL
, wechselte ich nur Datenbanken.
Was würde normalerweise die JSON aussehen wie in der Datenbank? Die vollständige Zeichenfolge meine ich. –