私がしたいのは、コントローラのcreateFormメソッドに渡されたEntityを使用してEntityTypeフィールドをフィルタリングすることです。symfonyのEntityType入力フィルタのパラメータとしてエンティティを使用する
エンティティが関連している:
従業員( '1')----( '1')ユーザ( 'M')-----( '1')TicketQueue( 'M')を - ---( '1')チケット
ユーザー( 'M')----( '1')チケット私が何をしたいのか
があるために、ticketqueueするチケット関係を使用しています従業員プロファイルを持ち、チケットが割り当てられているキューに割り当てられているユーザーだけにユーザーフィールドをフィルタすることができます。 のみのユーザーに割り当てられたキュー
けど避難所と従業員プロファイルと のみのユーザー:
私はsucessfullyある私の条件のいくつかを満たしている:私はどこ
は、これまでのところ、これはありますTicketQueue = "どこにチケットが割り当てられていても"どこのステートメントでフィルタリングするのか分かりませんでした。
このフォームはチケットのステータスと譲受人(ユーザー)の編集時にのみ使用されます。
Formクラス:
class TicketUpdateType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('assignedto', EntityType::class, array('multiple' => false,
'class' => 'AuthBundle\Entity\User', 'placeholder' => 'Select Personel',
'query_builder' => function (UserRepository $er) {
return $er->createQueryBuilder('u')
->select('u')
->join('u.employee','e')
->join('u.ticketQueues','tq')
->orderBy('u.username', 'ASC');
},
'label' => "Assigned To:",
'choice_label' => function
($q) {
return $q->getEmployee()->getFirstName()." ".$q->getEmployee()->getLastName();
}, 'attr' => array('class' => 'form-control')))
->add('ticketstatus', EntityType::class, array('multiple' => false,
'class' => 'TicketBundle\Entity\TicketStatus', 'placeholder' => 'Select Status','label' => "Ticket Status", 'choice_label' => function
($q) {
return $q->getName();
}, 'attr' => array('class' => 'form-control')));
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Ticket::class,
));
}
}
EDIT:
フォーム:
class TicketUpdateType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->addEventSubscriber(new AddQueueFieldSubscriber())
->add('ticketstatus', EntityType::class, array('multiple' => false,
'class' => 'TicketBundle\Entity\TicketStatus', 'placeholder' => 'Select Status','label' => "Ticket Status", 'choice_label' => function
($q) {
return $q->getName();
}, 'attr' => array('class' => 'form-control')));
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Ticket::class,
));
}
}
イベント加入:
class AddQueueFieldSubscriber implements EventSubscriberInterface{
public static function getSubscribedEvents()
{
// Tells the dispatcher that you want to listen on the form.pre_set_data
// event and that the preSetData method should be called.
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event)
{
$ticket = $event->getData();
$form = $event->getForm();
$queue = $event->getData()->getTicketQueue()->getName();
if ($ticket) {
$form->add('assignedto', EntityType::class, array('multiple' => false,
'class' => 'AuthBundle\Entity\User', 'placeholder' => 'Select Personel',
'query_builder' => function (UserRepository $er) use ($queue){
return $er->createQueryBuilder('u')
->select('u')
->join('u.employee','e')
->join('u.ticketQueues','tq')
->where('tq.name = :queue')
->orderBy('u.username', 'ASC')
->setParameter('queue', $queue);
},
'label' => "Assigned To:",
'choice_label' => function
($q) {
return $q->getEmployee()->getFirstName()." ".$q->getEmployee()->getLastName();
}, 'attr' => array('class' => 'form-control')));
}
}
}
なぜクエリビルダに追加しないでください: - > where( 'u.TicketQueue = 1')? – ahmedbhs
異なるキューを持つ別のチケットに適応することはできますか?問題のチケットと同じキューを持つユーザーのみが表示されます –
複数の参加ステートメントを使用する必要がありますか? $ qb-> select ( 'AuthBundle \ Entity \ User'、 'e') - > join( 'AuthBundle \ Entity \ User'、 'e') - >ここで( 'u.user = s .user ') - > andWhere(' u.TicketQueue = s。TicketQueue ') – ahmedbhs