Hey Richard,

Not sure about what exception you are getting right now, but cascade
deletion should solve it.

As for removing the bi-directional association, you could always sort the
`userProfiles` by date and fetch the first one when you want the current
profile.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


On 27 March 2014 07:54, Richard Hoffman <[email protected]> wrote:

> I have a User entity that has a oneToMany mapping to a UserProfile entity.
> Currently, I am only using the newest UserProfile entity created, while the
> rest are available for historical purposes. In order to reference only the
> latest UserProfile entity, I have another oneToOne mapping to UserProfile
> called currentProfile. However, this creates a circular reference, where my
> user_profile table references user via user_id, and my user table
> references user_profile via current_profile_id.
>
> So it looks something like this:
>
> class User {
>     /**
>      * @Id
>      */
>     private $id;
>
>     /**
>      * @OneToMany(targetEntity="UserProfile", mappedBy="user")
>      */
>     private $userProfiles;
>
>     /**
>      * @OneToOne(targetEntity="UserProfile")
>      * @JoinColumn(name="current_profile_id", referencedColumnName="id")
>      */
>     private $currentProfile;
> }
>
> class UserProfile {
>     /**
>      * @Id
>      */
>     private $id;
>
>     /**
>      * @ManyToOne(targetEntity="User", inversedBy="profiles")
>      * @JoinColumn(name="user_id", referencedColumnName="id",
> nullable=false)
>      */
>     private $user;
> }
>
> I previously had no qualms about this until a co-worker mentioned it was
> bad practice to have circular references, and cited an example where it was
> difficult to delete a user since you would have to set current_profile_id
> to null, then delete the user_profile, then delete user. His suggestion was
> to have a boolean on the UserProfile entity called currentProfile which
> could be toggled true or false. However, this defeats the purpose I had in
> mind since part of the reason I designed it this way was to easily access
> the current profile from the User entity, so that I can easily reference
> the current profile via DQL, and would save me fetching all rows from the
> user entity just to filter out the latest one.
>
> So is there a doctrine-friendly way to handle this without a circular
> reference, while still being saved from the burden of fetching all rows at
> once, or is the circular reference not so bad in this case? One idea was to
> create a view, but I am not sure how to map a view to my entity class.
>
> Thanks,
> Richard
>
> --
> You received this message because you are subscribed to the Google Groups
> "doctrine-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/doctrine-user.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to