php - Doctrine ManyToOne 关系 - 在“设置”时自动删除
问题描述
我正在处理 Doctrine 中的关系(使用 Symfony 5)。我所拥有的是这两种关系:
- 用户
- 可用性
用户有一个 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;
}
在删除多对多关系中的关系但不在多对一中删除关系时,相同的代码有效,属性“可用性”已正确设置,但在使用持久/刷新时,已删除的可用性不会在数据库上删除。
谢谢
解决方案
尝试按照以下教义文档中的示例设置属性:
<?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;
// ...
}
属性mappedBy
和inversedBy
是关系所必需的
推荐阅读
- azure - Azure 应用程序洞察力。自定义属性长度限制
- c++ - std::string 类成员被第三方宏记录的字符串文字损坏
- rust - 为什么联合上的模式匹配会出现无法访问的模式警告?
- c++ - opencv desktop capture returns only part of the screen on windows in large fonts mode
- javascript - Match string entries by regexp and create splitted array in javascript
- node.js - Node.js AWS Lambda不一致s3.putObject上传大数据对象
- javascript - JQuery/CSS 气泡鼠标悬停
- python-3.x - Python - Check if String is in Dictionary Value when Value is a list
- ajax - 表单POST上的DoesNotExist异常后,同一页面上的Django ajax警告
- javascript - 控制器处的 MVC 空参数