Speichern einer Entity mit ManyToOne-Association resultiert in Error 500

Ich muss nochmal hierauf zurückkommen. Jetzt habe ich es wirklich gelöst.

Das Problem saß tatsächlich tiefer: Grund war die ChildDefinition. Ich hatte in Analogie zum ManyToManyAssociationField ein ManyToOneAssociationField eingebaut (mit spiegelbildlichem OneToMannyAssociationField in der “ParentDefinition”). Jedoch war der entscheidende Fehler, dass in der ChildDefinition kein entsprechendes FkField mitdefiniert wurde. Das habe ich nun endlich durch Vergleich mit den funktionierenden TranslationDefinitions herausbekommen. (Vergleiche auch die BundleProductDefinition im Bundle-Example, die als Mittler in der ManyToMany-Assoziation fungiert.) 

Deswegen gab die API auch nach Shyims Vorschlag bei mir zunächst weiterhin (jedoch andere) Fehlermeldungen aus. Jetzt, wo das FkField definiert ist, funktioniert es tadellos sowohl nach Shyims Methode als auch mittels eines JSON mit _“parent”: { “id”:“abc123efg…” }, _wobei das Verhalten unterschiedlich ist, wenn die angegebene id in der Datenbank nicht existiert. Die Required-Flag muss dabei aufs FkField, nicht aufs ManyToOne-Field, sonst funktioniert nur die zweite Methode (vgl. diese Bemerkung).  

# ChildDefinition.php
...
new ManyToOneAssociationField('parent', 'parent_id', ParentDefinition::class, 'id', false),
(new FkField('parent_id', 'parent_id', ParentDefinition::class))->addFlags(new Required()),
...

// API-Calls per POST (Content-Type = application/json) an /api/v3/etoile-child

// funktioniert (scheitert, wenn kein parent mit angegebener id in Datenbank existiert):
{"name":"Kreiert per Methode 1", "parent_id": "4ab9ee1986c54ed486047d2f9f8c8f93"}

// funktioniert (kreiert neues parent, wenn angegebene id in Datenbank nicht existiert)
{"name":"Kreiert per Methode 2", "parent": {"id": "4ab9ee1986c54ed486047d2f9f8c8f93"}}