1

管理者、教授、学生の 3 種類のユーザーを持つ symfony2 アプリケーション用のカスタム ユーザー バンドルを開発しています。ユーザーの各タイプには、識別子 (スペイン語の国民識別番号: dni ) と、name、lastName などの別のデータがあります (異なるユーザーのタイプ間のデータはばらばらです)。

私の問題は、ユーザーのタイプに関係なく、 dniが繰り返されないようにする必要があることです。

UniqueEntity アノテーションを使用しましたが、これは機能しますが、同じタイプのエンティティでのみ機能します。

異なるタイプのエンティティに対してどのように行うことができますか?

コールバック アノテーションを使用して、他のエンティティにその dni を持つエンティティがないことをクエリで確認することを考えましたが、そのためにエンティティ内でエンティティ マネージャを使用する必要があり、これは悪い習慣です。

これを行う別の方法はありますか?

ご挨拶と感謝。

4

3 に答える 3

1

解決しました。これが最後のスニペットです (ladislav_prague に感謝)

$repository_a = $this->getDoctrine()->getRepository('AppBundle:Administrator');
    $administrator_dni_used = $repository_a->createQueryBuilder('a')->where('a.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();

$repository_p = $this->getDoctrine()->getRepository('AppBundle:Professor');
$professor_dni_used = $repository_a->createQueryBuilder('p')->where('p.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();

$repository_s = $this->getDoctrine()->getRepository('AppBundle:Student');
$student_dni_used = $repository_a->createQueryBuilder('s')->where('s.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();


if(is_null($administrator_dni_used) and is_null($professor_dni_used) and is_null($student_dni_used)){

// add new user

}else{

    $error = new FormError("There is already an user with that dni");
    $editForm->get('dni')->addError($error);
    // ...
}
于 2013-11-11T12:04:38.993 に答える
0

最後に挿入されたユーザーの dni が最初のユーザーよりも小さい可能性がある場合は、新しいユーザーを作成する前に既存の dni を確認してください。このような:

$repository_a = $this->getDoctrine()->getRepository('AppBundle:Administrator');
$administrator_dni_used = $repository_a->createQueryBuilder('a')->where('a.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();

$repository_p = $this->getDoctrine()->getRepository('AppBundle:Professor');
$professor_dni_used = $repository_a->createQueryBuilder('p')->where('p.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();

$repository_s = $this->getDoctrine()->getRepository('AppBundle:Student');
$student_dni_used = $repository_a->createQueryBuilder('s')->where('s.dni = \'' . $dni_to_check . '\'')->getQuery()->getOneOrNullResult();


if(is_null($administrator_dni_used) and is_null($professor_dni_used) and is_null($student_dni_used)){

// add new user

}
于 2013-11-11T11:40:59.350 に答える