2

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.

2
  • 1
    In your user entity in the annotation for love change cascade={"persist"} to cascade={"persist", "remove"} Commented Sep 12, 2017 at 18:25
  • @kunicmarko20 I don't think that would work, because you have no EntityManager::remove called. Commented Sep 12, 2017 at 18:48

1 Answer 1

2

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.