非活动的db字段(如果其中之一设置为true php)

时间:2018-12-06 06:03:01

标签: php database symfony

如果其中一个数据库字段设置为true,是否可以自动将其他数据库字段设置为false?

例如:

User
----

admin
is_super_admin
is_coach_admin

用户只能是上述值之一。如果将admin设置为true,则希望将is_super_admin和is_coach_admin自动设置为false。我的意思是,不要设置在后端。有办法吗?至少对于symfony主义来说是最好的:)

1 个答案:

答案 0 :(得分:0)

您可以通过Symfony表达式来验证您的业务逻辑(如果一个值为true,其他值为false)

https://symfony.com/doc/3.4/reference/constraints/Expression.html

# src/AppBundle/Resources/config/validation.yml
AppBundle\Model\User:
    properties:
        isAdmin:
            - Expression:
                expression: "this.isSuperAdmin() == false"
                message: "Admin cannot be a super admin also"

但是,如果您要基于另一个字段设置一个字段的值,则可以使用Symfony事件。

   $builder->addEventListener(
        FormEvents::SUBMIT,
        function(FormEvent $event) {
            $form = $event->getForm(); 
            $data = $event->getData();             

            if ($data->isAdmin()){
                $form->get('is_super_admin')->setData(false);
                $form->get('is_coach_admin')->setData(false);
            }
        }
);