удалить много-много ассоциаций Symfony 3.4 - PullRequest
0 голосов
/ 22 июня 2019

У меня есть две сущности "Продукт" и "Пользователь" с ассоциацией 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 голосов
/ 22 июня 2019

У вас есть два варианта: - Пусть учение сделает всю работу за вас - Пусть 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;

Если вы хотите, чтобы он был двунаправленным, просто добавьте то же самое в другой стороне объекта

...