【发布时间】:2018-03-19 23:13:30
【问题描述】:
我有两个实体:Document 和 DocumentValidation
文档:
class Document
{
...
/**
* @ORM\OneToMany(
* targetEntity="AppBundle\Entity\DocumentValidation",
* mappedBy="document",
* cascade={"persist"}
* )
*/
private $validations;
文档验证:
class DocumentValidation
{
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=true)
* @Assert\DateTime
*/
private $validatedAt;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=true)
* @Assert\DateTime
*/
private $deletedAt;
每个文档都可以多次验证和删除。但是一个文档只能有一个正在进行的验证:验证,删除,验证,删除,验证,删除,验证,...
在 Twig 中,我列出了所有文档。我想检查每个文档是否可以删除。 如果文档正在进行验证,则无法删除并隐藏删除图标。
最好的方法是什么?
- 如果我在 Symfony Voter 中使用 Doctrine 查询和 is_granted() 来检查每个文档是否正在进行验证,我有很多很多查询...(每个文档一个);李>
- 如果我在 Controller 中使用 LEFT JOIN(和 Symfony Voter),如果我有很多控件(请阅读下面的 [PLEASE]),这将非常困难;
- 如果可以删除每个文档,则使用 Filesystemcache 创建一个类并保存。在每次链接实体操作时重新生成缓存;
- 其他?
请记住,这种情况非常简单。在我的情况下,我有很多理由 (> 10) 拒绝删除或修改,几乎总是因为数据库中的关系
【问题讨论】:
-
为什么要把事情复杂化?你不能只检查
validatedAt > deletedAt是否显示删除图标(因为实体已经过验证,现在可以删除),否则隐藏?
标签: php symfony acl symfony-3.3 symfony-security