Buat contoh baharu objek entiti yang tidak mematuhi keputusan rasmi - Symfony 5
P粉004287665
P粉004287665 2023-09-12 18:34:54
0
1
574

Saya mempunyai tiga entiti. "Bordereau", "Stagiaire", "BordereauStagiaire".

Saya mencipta borang berbilang langkah di mana saya mencipta Bordereau baharu dan saya perlu menunjukkan kepada pengguna "Stigiaires" yang dipilih dan kemudian mengesahkannya. Kedua-dua Bordereau dan Stagiaire dihubungkan melalui jadual BordereauStagiaire.

Saya berjaya mendapatkan id Bordereau dan Stagiaire dalam pengawal melalui borang Bordereau baharu. Tetapi saya sedang mencari cara untuk mencipta BordereauStagiaire baharu apabila Bordereau baharu dibuat.

Ini adalah kaedah yang saya telah mula laksanakan. Bahagian belakang, Bordereau akan dibuat dahulu, kemudian BS akan dibuat dengan Bordereau baharu dan stagiair yang dipilih. Jadual BS mempunyai id Bordereau, id Stagiaire dan jumlah (atribut lain).

Bagaimana untuk mencipta BordereauStagiaire baharu menggunakan ID Bordereau dan ID Stagiaires yang saya dapat daripada borang?

Ini pengawal saya

#[Route('/create/bordereau', name: 'app_bordereau_create', methods: ['GET','POST'])]
    public function createBordereauAction(CreateBordereauFlow $flow, PersistenceManagerRegistry $doctrine)
    {
        $formBordereau = new Bordereau();
        $formBordStag = new BordereauStagiaire();

        $formBordereau->setUser($this->getUser());

        $flow->bind($formBordereau);

        $form = $flow->createForm();
        
        if ($flow->isValid($form)) {
            $flow->getCurrentStepNumber($form);
            $flow->saveCurrentStepData($form);
            if ($flow->nextStep()) {
                $form = $flow->createForm();
                $flow->getCurrentStepNumber($form);
                $flow->saveCurrentStepData($form);
                // dd($form['stagiaire']->getData()[0]->getId());
                // dd($form->getData());
                
            } else{
                
                $entityManager = $doctrine->getManager();
                $entityManager->persist($formBordereau);
                $entityManager->flush();
                // dd($formBordereau->getId());
                return $this->redirectToRoute('app_bordereau_index');
                
            }
        }

        // if ($flow->redirectAfterSubmit($form)) {
        //     // $request = $this->getRequest();
        //     $params = $this->formFlowUtil->addRouteParameters(array_merge($request->query->all(),
        //             $request->attributes->get('_route_params')), $flow);
    
        //     return $this->redirectToRoute($request->attributes->get('_route'), $params);
        // }

        return $this->render('bordereau/create_bordereau.html.twig', [
            'form' => $form->createView(),
            'flow' => $flow,
            'formBordereau' =>$formBordereau,
        ]);
    }

Ini yang saya dapat dari borang php $form['stagiaire']->getData()[0]->getId() 和 bordereau 获取数据的方式,我在持久化后获取其 id刷新到数据库中。 php $formBordereau->getId()

P粉004287665
P粉004287665

membalas semua(1)
P粉771233336

Apa yang saya tulis adalah jawapan, tetapi ia lebih kepada komen dengan banyak teks.

Pertama sekali, saya syorkan anda hanya menggunakan pembolehubah bernama bahasa Inggeris, sekurang-kurangnya elakkan menggunakan nama operasi seperti bordereau 来命名诸如 create .

Kemudian, berikan pembolehubah yang anda akan gunakan nama: $formBordereau 不是表单,它是一个实体,您应该只使用 $bordereau.

Nah, anda memerlukan entiti ini BordereauStagiaire 吗?我知道这是一个 ManyToMany perhubungan, Symfony dan Doctrine menguruskannya terus melalui entiti, anda tidak memerlukan entiti ketiga ini.

Doktrin ialah ORM, yang bermaksud anda hanya boleh bekerja dengan objek, bukan ID, jika anda mereka bentuk perhubungan dengan betul, Bordereau 实体中应该有一个方法 addStagiaire anda dan sebaliknya.

Anda hendaklah memanggil kaedah ini dengan objek berikut:

// I am not sure here, does it return a Stagiaire Entity ? 
// I don't understand your flow form
$stagiaire = $form['stagiaire']->getData()[0];

$entityManager->persist($bordereau);
$bordereau->addStagiaire($stagiaire);
$entityManager->flush();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan