【发布时间】:2019-12-06 01:01:55
【问题描述】:
所以,我需要对体育俱乐部的预订进行验证。 预订有开始和结束日期时间,您可以预订 1 个或多个表。
所以实体看起来像
class Reservation
{
use TimestampAble;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="reservations")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Table", inversedBy="reservations")
*/
private $tables;
/**
* @ORM\Column(type="datetime")
*/
private $start;
/**
* @ORM\Column(type="datetime")
*/
private $end;
...
}
(不要担心实体“Table” - 它的 db 表名为“snooker_table”;))
现在我需要验证,在请求表的请求时间范围内,不存在其他预订。 这让我很头疼……
我知道我可以在控制器操作中“手动”创建/更新。但我也在使用 Symfonys Easy-Admin,所以我也需要把代码放在那里。 我考虑过将验证作为注释直接放入实体中。但我不知道在哪里......如果我把它放在“$tables”上,我只会得到一个没有所需开始和结束日期时间的 ArrayCollection。而且它也不是一个独特的实体(因为我需要继续进行一系列日期时间等等)。
那么:任何想法如何直接在实体中实现这一点?或者至少是表单类型(为了便于管理,我稍后会关心)?
提前致谢。
【问题讨论】:
-
您是否尝试过创建custom constraint?
-
好吧,约束本身并不是什么大问题。但是放在哪里...
-
和代码本身一样?还是在
Reservation实体中?最后一节深入探讨类验证而不是属性验证。
标签: php symfony validation doctrine symfony4