Lenny4
Lenny4

Reputation: 1668

Delete an entity inside another entity Symfony

I have 2 entities : User And Love. This is a "One-To-Many, Bidirectional".

Here are my entities:

User:

namespace SE\UserBundle\Entity;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="SE\UserBundle\Repository\UserRepository")
 */
class User extends BaseUser
{
    //...
    /**
     * One User has Many Loves.
     * @ORM\OneToMany(targetEntity="SE\CoreBundle\Entity\Love", mappedBy="user", cascade={"persist"})
     */
    private $loves;
    //...

    public function __construct()
    {
        //...
        $this->loves = new ArrayCollection();
        //...
    }

    //...

    /**
     * Remove love
     *
     * @param \SE\CoreBundle\Entity\Love $love
     */
    public function removeLove(\SE\CoreBundle\Entity\Love $love)
    {
        $this->loves->removeElement($love);
        //delete love
    }

    //...
}

Love :

namespace SE\CoreBundle\Entity;

/**
 * Love
 *
 * @ORM\Table(name="love")
 * @ORM\Entity(repositoryClass="SE\CoreBundle\Repository\LoveRepository")
 */
class Love
{
    //...
    /**
     * Many Loves have One User.
     * @ORM\ManyToOne(targetEntity="SE\UserBundle\Entity\User", inversedBy="loves", cascade={"persist"})
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
    //...

     /**
     * Set user
     *
     * @param \SE\UserBundle\Entity\User $user
     *
     * @return Love
     */
    public function setUser(\SE\UserBundle\Entity\User $user = null)
    {
        $this->user = $user;
        return $this;
    }
    //...
}

My question is: Is there a way, when i execute removeLove() on my User, the corresponding Love entity autodelete in my database without using an entity manager in my controller. I would like my controller to look like that:

class DefaultController extends Controller
{
    public function indexAction()
    {
        //...
        $em = $this->getDoctrine()->getManager();
        $user->removeLove($love);
        $em->persist($user);
        $em->flush();
        //...
    }
}

And the result would be that, $love would not be in getLoves() of the $user and $love would be delete of the database.

Upvotes: 2

Views: 681

Answers (1)

CappY
CappY

Reputation: 1580

You could try: Orphan Removal option

Make sure Entity Love is not associated with another User. So one Entity Love is always associated with only one User

Upvotes: 2

Related Questions