首页 > 解决方案 > Doctrine ManyToOne 关系 - 在“设置”时自动删除

问题描述

我正在处理 Doctrine 中的关系(使用 Symfony 5)。我所拥有的是这两种关系:

  1. 用户
  2. 可用性

用户有一个 ID 并且有很多可用性。

所以实体用户有

/**
 * @ORM\OneToMany(targetEntity="UserAvailability", mappedBy="user")
 */
private $availability;

和实体可用性相反。

可用性与以下因素有关:

id、user_id、day_name、start_time 和 end_time,就这么简单。

我已经通过 ManyToMany 实现的并且在这种情况下我也想实现的是:

我需要从客户端接收用户的整个可用性集并使用它来更新我的用户的可用性,所以我定义了一个 setAvailability 方法,它接收可用性实体的集合并简单地执行

$this->availabilities = $availabilities.

这在我添加新的可用性时有效,但是在我持久化实体时不会删除数据库上而不是集合中的可用性。

同样的方法可以完美地适用于多对多关系。

我错过了什么?

*** 更新 **

public function setAvailability($availability): self
    {
        $this->availability = $availability;
        return $this;
    }

在删除多对多关系中的关系但不在多对一中删除关系时,相同的代码有效,属性“可用性”已正确设置,但在使用持久/刷新时,已删除的可用性不会在数据库上删除。

谢谢

标签: phpsymfonyormdoctrinebackend

解决方案


尝试按照以下教义文档中的示例设置属性:

<?php
use Doctrine\Common\Collections\ArrayCollection;

/** @Entity */
class User
{
    // ...
    /**
     * One user has many availabilities. This is the inverse side.
     * @OneToMany(targetEntity="Availability", mappedBy="user")
     */
    private $availabilities;
    // ...

    public function __construct() {
        $this->availabilities = new ArrayCollection();
    }
}

/** @Entity */
class Availability
{
    // ...
    /**
     * Many availabilities have one user. This is the owning side.
     * @ManyToOne(targetEntity="User", inversedBy="availabilities")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
    // ...
}

属性mappedByinversedBy是关系所必需的


推荐阅读