-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Closed
Description
@stof @weaverryan @fabpot @totophe @genexp @rquadling @nud I am wondering if Symfony 3 has fixed the problem with unique constraints on super- and subclasses since it does not work for me...
For example, I have 2 sub-entities that are derived from an abstract parent entity and I gave the parent 2 unique constraints like this:
/**
* User
*
* @ORM\Table(
* name="user",
* indexes={
* @ORM\Index(name="user_fn_ix", columns={"first_name"}),
* @ORM\Index(name="user_ln_ix", columns={"last_name"}),
* @ORM\Index(name="user_phone_ix", columns={"phone_number"}),
* }
* )
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
* "courier": "AppBundle\Entity\User\Courier",
* "client": "AppBundle\Entity\User\Client",
* })
* @ORM\Entity(repositoryClass="AppBundle\Repository\User\UserRepository")
* @UniqueEntity(fields={"email"})
* @UniqueEntity(fields={"phoneNumber"})
* @Serializer\ExclusionPolicy("all")
* @Serializer\Discriminator(field="type", map={
* "courier": "AppBundle\Entity\User\Courier",
* "client": "AppBundle\Entity\User\Client",
* })
* @Vich\Uploadable()
*/
abstract class AbstractUser implements UserInterface { ... }
*/There are 2 subclasses that are derived from the superclass:
/**
* Client
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\User\ClientRepository")
* @Serializer\ExclusionPolicy("all")
*/
class Client extends AbstractUser {...}/**
* Courier
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\User\CourierRepository")
* @UniqueEntity(fields={"email"}, groups={"registration", "profile"})
* @UniqueEntity(fields={"phoneNumber"}, groups={"registration", "profile"})
* @Serializer\ExclusionPolicy("all")
*/
class Courier extends AbstractUser { ... }I created a form type for Courier
class CourierType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('avatarFile', FileType::class, ['required' => true])
->add('firstName', TextType::class, ['required' => true])
->add('lastName', TextType::class, ['required' => true])
->add('email', EmailType::class, ['required' => true])
->add('password', PasswordType::class, ['required' => true])
->add('phoneNumber', PhoneNumberType::class, [
'widget' => PhoneNumberType::WIDGET_COUNTRY_CHOICE,
'country_choices' => ['US'],
'preferred_country_choices' => ['US'],
'default_region' => 'US',
'required' => true,
])
->add('address', TextType::class, ['required' => true])
->add('zipCode', TextType::class, ['required' => true])
->add('biography', TextareaType::class, ['required' => true])
->add('vehicleType', TextType::class, ['required' => true])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Courier::class,
'validation_groups' => ['Default', 'registration'],
]);
}
public function getName()
{
return 'courier';
}
}Validation Code:
class AppController extends Controller
{
public function indexAction(Request $request)
{
$form = $this->createForm(CourierType::class, new Courier());
$form->handleRequest($request);
if ($form->isValid()) {
echo 'yes';
} else {
echo 'invalid';
}
}
}Running the controller always gives me 'yes' even if I pass a duplicate email or phone number. This means the @UniqueConstraint constraints are not working.
I thought this should be fixed now as this issue has been raised by many.
What's wrong with the code?