Ik heb een applicatie met 3 subscription plans. Elke gebruiker heeft steeds 1 subscription actief. De gebruikers en hun subscriptions worden beschreven door het volgende model (MySQL):

De reden voor het bestaan van de user_subscription tabel is het bijhouden of een gebruiker zijn trial reeds heeft gebruikt of niet. In de user_subscription tabel zit dus maximaal hetzelfde aantal rijen als er subscription types zijn. Om de huidig actieve user_subscription aan te duiden is er een terugkoppeling naar de user tabel (subscription_id). Ook is er een terugkoppeling voor de vorige subscription die de user had (previous_subscription_id).
Dit werkt prima, maar bij het mappen/gebruiken van Doctrine ORM zit ik met een aantal problemen. De User entity bevat een OneToMany relatie naar user_subscription genaamd subscriptions. Dezelfde User entity bevat daarnaast ook 2 ManyToOne relaties om de huidige en vorige subscription aan te duiden. Als een user zijn subscription veranderd moet worden, doe ik dit telkens door de UserSubscriptionType mee te geven aan de changeSubscription() methode van de User entity:
Indien de UserSubscription voor het gegeven type reeds bestaat, is er geen probleem; dan haal ik de bestaande UserSubscription gewoonweg uit de subscriptions arraycollection en assign ik hem aan de subscription property om hem actief te zetten.
Indien de UserSubscription voor het gegeven type nog niet bestaat, moet ik deze eerst aanmaken en hier zit het probleem: ik moet de nieuwe UserSubscription instantie zowel aan de subscriptions arraycollection toevoegen als aan de subscription property toe kennen om hem actief te zetten. Doctrine lijkt hier niet goed mee overweg te kunnen: het maakt niet uit of ik enkel op de subscriptions arraycollection cascade persist zet of ook op de subscription property: ik krijg telkens de exception dat subscription_id null is bij het inserten in de tabel.
Hoe kan ik dit datamodel laten werken in Doctrine?

De reden voor het bestaan van de user_subscription tabel is het bijhouden of een gebruiker zijn trial reeds heeft gebruikt of niet. In de user_subscription tabel zit dus maximaal hetzelfde aantal rijen als er subscription types zijn. Om de huidig actieve user_subscription aan te duiden is er een terugkoppeling naar de user tabel (subscription_id). Ook is er een terugkoppeling voor de vorige subscription die de user had (previous_subscription_id).
Dit werkt prima, maar bij het mappen/gebruiken van Doctrine ORM zit ik met een aantal problemen. De User entity bevat een OneToMany relatie naar user_subscription genaamd subscriptions. Dezelfde User entity bevat daarnaast ook 2 ManyToOne relaties om de huidige en vorige subscription aan te duiden. Als een user zijn subscription veranderd moet worden, doe ik dit telkens door de UserSubscriptionType mee te geven aan de changeSubscription() methode van de User entity:
Indien de UserSubscription voor het gegeven type reeds bestaat, is er geen probleem; dan haal ik de bestaande UserSubscription gewoonweg uit de subscriptions arraycollection en assign ik hem aan de subscription property om hem actief te zetten.
Indien de UserSubscription voor het gegeven type nog niet bestaat, moet ik deze eerst aanmaken en hier zit het probleem: ik moet de nieuwe UserSubscription instantie zowel aan de subscriptions arraycollection toevoegen als aan de subscription property toe kennen om hem actief te zetten. Doctrine lijkt hier niet goed mee overweg te kunnen: het maakt niet uit of ik enkel op de subscriptions arraycollection cascade persist zet of ook op de subscription property: ik krijg telkens de exception dat subscription_id null is bij het inserten in de tabel.
Hoe kan ik dit datamodel laten werken in Doctrine?