Symfony 3.3 Попълване на падащо меню ChoiceType от таблица на база данни

Опитвам се да попълня падащо меню във формуляр от базата данни, Етикетите за избор идват добре, но не мога да върна правилни стойности (ID) срещу тези опции в падащото меню, Как да напиша код за „избори“ в следното?

public function newModelAction(Request $request)
    {
        $product = $this->getDoctrine()
        ->getRepository('coreBundle:brand')
        ->findAll();


        if (!$product) {
            throw $this->createNotFoundException(
                'No product found for id '.$productId
                );
        }

        $model = new model();
        $form = $this->createFormBuilder($model)
        ->add('brand_id',ChoiceType::class,array(
            'label'=>'Brand Name',
            'choices'=>array($product),
            'choice_label' => function($product, $key, $index) {
            return strtoupper($product->getName());
            },
            ))
        ->add('name',TextType::class,array('label'=>'Model Name'))
        ->add('comment',TextType::class,array('label'=>'Comments'))
        ->add('save',SubmitType::class, array('label'=>'Add Model'))
        ->getForm();


        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {

            $em = $this->getDoctrine()->getManager();
            $em->persist($model);
            $em->flush();
            return $this->render('coreBundle:layouts:newItem.html.twig',
                array('form'=>$form->createView(),));
        }


        // ... do something, like pass the $product object into a template
        return $this->render('coreBundle:layouts:newModel.html.twig',
            array('form'=>$form->createView(),));

    }

Изображение на формуляр, изборите се попълват от Db, но не връщат идентификатор при изпращане

въведете описание на изображението тук

Получавам следното изключение:

Възникна изключение при изпълнение на „INSERT INTO model (brand_id, name, image_url, comment) VALUES (?, ?, ?, ?)“ с параметри [null, "ABC", null, "XYZ"]: SQLSTATE[23000]: Нарушение на ограничението за интегритет: 1048 Колоната „brand_id“ не може да бъде нулева

Игнорирайте Image_url като null,


person XEnterprise    schedule 13.06.2017    source източник
comment
Все същото изключение   -  person XEnterprise    schedule 13.06.2017


Отговори (1)


първо решение: Променете ChoiceType от EntityType и предайте вашия модел обект на вашия формуляр, така че symfony да може да направи картографирането сам

второ решение: вземете brand_id с form->getData() и го задайте на вашия модел обект

person t-n-y    schedule 13.06.2017
comment
-›add('brand_id',EntityType::class,array( 'label'=›'Brand Name', 'class' =› 'coreBundle:brand', 'choice_label'=›'name' )) Все още същия проблем - person XEnterprise; 13.06.2017