【问题标题】:How to create multiple ChoiceType - Rows in Symfony如何创建多个 ChoiceType - Symfony 中的行
【发布时间】:2019-02-07 16:22:56
【问题描述】:

我有多个 EntityType,它从数据库中获取他的值,如下所示:

MyFormType.php

 private $membersRepository;

 public function __construct(MembersRepository $membersRepository)
 {
    $this->membersRepository = $membersRepository;
 }

 public function buildForm(FormBuilderInterface $builder, array $options)
 {
    $builder
        ->add('trainer', EntityType::class, [
            'multiple' => true,
            'expanded' => true,
            'class' => Members::class,
            'choices' => $this->membersRepository->findAllByExecutive(),
            'placeholder' => 'Ausbilder',
            'label' => 'Ausbilder',
            'attr'=> array('class'=>'form-control'),
            ])

我的存储库与 findAllByExecutive()

 /**
 * @return Members[]
 */
public function findAllByExecutive()
{
    return $this->createQueryBuilder('u')
    ->select('partial u.{id, firstname, lastname}')
        ->orderBy('u.lastname', 'ASC')
        ->add('where', 'u.executive = 1')
        ->getQuery()
        ->execute();
}

最后是我的控制器将这些值放入数据库

 if ($form->isSubmitted() && $form->isValid()) {

        /** @var Dienstbuch $dienstbuch */
        $dienstbuch = $form->getData();
        //dd($dienstbuch->trainer);
        $em->persist($dienstbuch);
        $em->flush();
        $this->addFlash('success', 'Eintrag gespeichert');

        return $this->redirectToRoute('dienstbuch.neu');
    }
  1. 为什么我的方法 findAllByExecutive() 给我的结果比我预期的 3 行多?!
  2. 如何为每个用户行构建 3 个复选框?我只给用户一个复选框。我已经阅读了很多小时、文档、帖子,但我找不到解决方案。我希望你能帮助我提供链接或想法。

【问题讨论】:

    标签: php mysql symfony


    【解决方案1】:

    试试看

    /**
     * @return Members[]
     */
    public function findAllByExecutive()
    {
       return $this->createQueryBuilder('u')
            ->select('partial u.{id, firstname, lastname}')
            ->orderBy('u.lastname', 'ASC')
            ->add('where', 'u.executive = 1')
            ->getQuery()
            ->setHint(Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD, 1)
            ->execute();
        }
    
    

    【讨论】:

    • 虽然这可能是一个很好的答案,但缺乏解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多