删除多对多联想symfony 3.4

时间:2019-06-22 15:23:55

标签: symfony doctrine symfony-3.4

我有两个与ManyToMany关联的实体“产品”和“用户”。 我想在此关联中添加列。  为此,我必须创建另一个实体,并以一对多和多对一的关系将它们链接在一起。 所以问题是如何删除第一个关联“ ManyToMany”

来自:

class Product
{
    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="products")
     */
    private $users;
}
class User extends BaseUser
{
    /**
     * @ORM\ManyToMany(targetEntity="ManagementBundle\Entity\Product", inversedBy="users")
     * @ORM\JoinTable(name="users_products")
     */
    protected $products;
}

收件人:

class Product
{
    /**
     * @ORM\ManyToOne(targetEntity="OrderProduct", inversedBy="products",cascade={"persist"})
     * @ORM\JoinColumn(name="OrderProduct_id", referencedColumnName="id")
     */
    private $OrderProduct;
}
class User extends BaseUser
{
    /**
     * @var string
     *
     * @ORM\OneToMany(targetEntity="OrderProduct", mappedBy="user",cascade={"persist"})
     */
    protected $orderProducts;
}
class OrderProduct
{

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="OrderProducts",cascade={"persist"})
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @var string
     *
     * @ORM\OneToMany(targetEntity="Product", mappedBy="OrderProduct",cascade={"persist"})
     */
    private $products;
}

1 个答案:

答案 0 :(得分:0)

您有两种选择: -让教义为您完成工作 -让Mysql做 选择取决于您的需要。

对于学说,使用

/**
 * @var int
 *å
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="products", cascade={"remove"})
 */
private $users;

对于MySQL,告诉MySQL在删除时进行级联删除,例如:(在这种情况下,您应该更新数据库架构)

/**
 * @var int
 *å
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="products")
 * @ORM\JoinColumn(onDelete="CASCADE")
 */
private $users;

如果您希望它是双向的,只需将其添加到另一侧实体