有没有一种方法可以让父母和孩子拥有相同的父母约束



我使用Doctrine作为PostgreSQL的ORM。我有很多实体,但这里有我的限制:

一个系列有很多季一季有很多集

我有一个集和系列之间的关系,有一个功能系列->getEpicodes(((不经过季节(。

我的问题是:有没有办法告诉Doctrine,这一集和这一季必须有相同的系列换言之,添加一个约束,说一个孩子和他的父母必须有一个共同的父母?

因为如果没有这个限制,理论上这一集(孩子(和这一季(家长(有可能有一个不同的系列(但我现在在应用程序中避免了这一点(。

您必须创建自己的验证约束。https://symfony.com/doc/current/validation/custom_constraint.html

/**
* @Annotation
*/
class HasSameSeason extends Constraint
{
public $message = 'The episode's serie must match the season serie';

public function validatedBy()
{
return static::class.'Validator';
}
}
class HasSameSeasonValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!$constraint instanceof HasSameSeason) {
throw new UnexpectedTypeException($constraint, HasSameSeason::class);
}
if (!$value instanceof Episode) {
throw new UnexpectedTypeException($value, Episode::class);
}
if ($episode->getSerie() !== $episode->getSeason()->getSerie()) {
$this->context->buildViolation($constraint->message)->addViolation();
}
}
}

最新更新