oulai kenny
oulai kenny

Reputation: 43

Symfony 4 ORMException

Hello i m faced with this Exception:

Entity of type App\Entity\CrfCvs is missing an assigned ID for field 'cvsIde'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.

I have an object CrfCvs who have two related objects:CvsVts and CvsUtl like that: CrfCvs

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * CrfCvs
 *
 * @ORM\Table(name="CRF_CVS")
 * @ORM\Entity
 */
class CrfCvs
{
    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_ECG", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsEcg;

    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_BLO_DRA", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsBloDra;

    /**
     * @var string|null
     *
     * @ORM\Column(name="CVS_END_ISS", type="string", length=255, nullable=true)
     */
    private $cvsEndIss;

    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_END_RHI", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsEndRhi;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(name="CVS_END_DAT", type="datetime", nullable=true)
     */
    private $cvsEndDat;

    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_HEA_HCT", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsHeaHct;

    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_HEA_HB", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsHeaHb;

    /**
     * @var float|null
     *
     * @ORM\Column(name="CVS_NUM_DAY", type="float", precision=10, scale=0, nullable=true)
     */
    private $cvsNumDay;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(name="CVS_DAY", type="datetime", nullable=true)
     */
    private $cvsDay;

    /**
     * @var string|null
     *
     * @ORM\Column(name="CVS_LAS_ID", type="string", length=255, nullable=true)
     */
    private $cvsLasId;

    /**
     * @var string|null
     *
     * @ORM\Column(name="CVS_OXF_ID", type="string", length=255, nullable=true)
     */
    private $cvsOxfId;

    /**
     * @ORM\Column(name="CVS_IDE", type="string", length=255, nullable=false)
     * @ORM\Id
     */
    private $cvsIde;


    /**
     * @ORM\OneToMany(targetEntity="App\Entity\CvsVts", mappedBy="cvsIde", cascade={"persist"})
     */
    private $cvsVts;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\CvsUlt", mappedBy="cvsIde", cascade={"persist"})
     */
    private $cvsUlt;

    public function __construct()
    {
        $this->cvsUlt = new ArrayCollection();
        $this->cvsVts = new ArrayCollection();
    }

    /**
     * @return float|null
     */
    public function getCvsEcg(): ?float
    {
        return $this->cvsEcg;
    }

    /**
     * @param float|null $cvsEcg
     */
    public function setCvsEcg(?float $cvsEcg): void
    {
        $this->cvsEcg = $cvsEcg;
    }

    /**
     * @return float|null
     */
    public function getCvsBloDra(): ?float
    {
        return $this->cvsBloDra;
    }

    /**
     * @param float|null $cvsBloDra
     */
    public function setCvsBloDra(?float $cvsBloDra): void
    {
        $this->cvsBloDra = $cvsBloDra;
    }

    /**
     * @return string|null
     */
    public function getCvsEndIss(): ?string
    {
        return $this->cvsEndIss;
    }

    /**
     * @param string|null $cvsEndIss
     */
    public function setCvsEndIss(?string $cvsEndIss): void
    {
        $this->cvsEndIss = $cvsEndIss;
    }

    /**
     * @return float|null
     */
    public function getCvsEndRhi(): ?float
    {
        return $this->cvsEndRhi;
    }

    /**
     * @param float|null $cvsEndRhi
     */
    public function setCvsEndRhi(?float $cvsEndRhi): void
    {
        $this->cvsEndRhi = $cvsEndRhi;
    }

    /**
     * @return \DateTime|null
     */
    public function getCvsEndDat(): ?\DateTime
    {
        return $this->cvsEndDat;
    }

    /**
     * @param \DateTime|null $cvsEndDat
     */
    public function setCvsEndDat(?\DateTime $cvsEndDat): void
    {
        $this->cvsEndDat = $cvsEndDat;
    }

    /**
     * @return float|null
     */
    public function getCvsHeaHct(): ?float
    {
        return $this->cvsHeaHct;
    }

    /**
     * @param float|null $cvsHeaHct
     */
    public function setCvsHeaHct(?float $cvsHeaHct): void
    {
        $this->cvsHeaHct = $cvsHeaHct;
    }

    /**
     * @return float|null
     */
    public function getCvsHeaHb(): ?float
    {
        return $this->cvsHeaHb;
    }

    /**
     * @param float|null $cvsHeaHb
     */
    public function setCvsHeaHb(?float $cvsHeaHb): void
    {
        $this->cvsHeaHb = $cvsHeaHb;
    }

    /**
     * @return float|null
     */
    public function getCvsNumDay(): ?float
    {
        return $this->cvsNumDay;
    }

    /**
     * @param float|null $cvsNumDay
     */
    public function setCvsNumDay(?float $cvsNumDay): void
    {
        $this->cvsNumDay = $cvsNumDay;
    }

    /**
     * @return \DateTime|null
     */
    public function getCvsDay(): ?\DateTime
    {
        return $this->cvsDay;
    }

    /**
     * @param \DateTime|null $cvsDay
     */
    public function setCvsDay(?\DateTime $cvsDay): void
    {
        $this->cvsDay = $cvsDay;
    }

    /**
     * @return string|null
     */
    public function getCvsLasId(): ?string
    {
        return $this->cvsLasId;
    }

    /**
     * @param string|null $cvsLasId
     */
    public function setCvsLasId(?string $cvsLasId): void
    {
        $this->cvsLasId = $cvsLasId;
    }

    /**
     * @return string|null
     */
    public function getCvsOxfId(): ?string
    {
        return $this->cvsOxfId;
    }

    /**
     * @param string|null $cvsOxfId
     */
    public function setCvsOxfId(?string $cvsOxfId): void
    {
        $this->cvsOxfId = $cvsOxfId;
    }

    /**
     * @return string
     */
    public function getCvsIde(): string
    {
        return $this->cvsIde;
    }

    /**
     * @param string $cvsIde
     */
    public function setCvsIde(string $cvsIde): void
    {
        $this->cvsIde = $cvsIde;
    }


    public function getCvsVts()
    {
        return $this->cvsVts;
    }

    /**
     * @param Collection $cvsVts
     */
    public function setCvsVts(ArrayCollection $cvsVts): void
    {
        $this->cvsVts = $cvsVts;
    }


    public function getCvsUlt()
    {
        return $this->cvsUlt;
    }

    /**
     * @param Collection $cvsUlt
     */
    public function setCvsUlt(ArrayCollection $cvsUlt): void
    {
        $this->cvsUlt = $cvsUlt;
    }



    public function addCvsUlt(CvsUlt $item)
    {
        $this->cvsUlt[]=$item;
        $item->setCvsIde($this);
        return $this;
    }

    public function addCvsVts(CvsVts $item)
    {
        $this->cvsVts[]=$item;
        $item->setCvsIde($this);
        return $this;
    }


    public function removeCvsUlt($exp)
    {
        $this->cvsUlt->removeElement($exp);
    }


    public function removeCvsVts($exp)
    {
        $this->cvsVts->removeElement($exp);
    }





}

CvsVts

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * CvsVts
 *
 * @ORM\Table(name="CVS_VTS", uniqueConstraints={@ORM\UniqueConstraint(name="id", columns={"id"})})
 * @ORM\Entity
 */
class CvsVts
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")\
     */
    private $id;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_REC_VAS", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsRecVas;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_REC", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsRec;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_NIC", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsNic;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_LAC", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsLac;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_OXY", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsOxy;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_SAT", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsSat;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_RR", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsRr;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_PP", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsPp;

    /**
     * @var float|null
     *
     * @ORM\Column(name="VTS_MAP", type="float", precision=10, scale=0, nullable=true)
     */
    private $vtsMap;

    /**
     * @var string|null
     *
     * @ORM\Column(name="VTS_BP", type="string", length=255, nullable=true)
     */
    private $vtsBp;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(name="VTS_TIM", type="datetime", nullable=true)
     */
    private $vtsTim;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(name="VTS_DAT", type="datetime", nullable=true)
     */
    private $vtsDat;

    /**
     * @ORM\ManyToOne(targetEntity="CrfCvs",cascade={"persist"})
     * @ORM\JoinColumn(name="CVS_IDE", referencedColumnName="CVS_IDE")
     */
    private $cvsIde;

    public function __construct()
    {
        $this->cvsIde = new CrfCvs();
    }

    /**
     * @return float|null
     */
    public function getVtsRecVas(): ?float
    {
        return $this->vtsRecVas;
    }

    /**
     * @param float|null $vtsRecVas
     */
    public function setVtsRecVas(?float $vtsRecVas): void
    {
        $this->vtsRecVas = $vtsRecVas;
    }

    /**
     * @return float|null
     */
    public function getVtsRec(): ?float
    {
        return $this->vtsRec;
    }

    /**
     * @param float|null $vtsRec
     */
    public function setVtsRec(?float $vtsRec): void
    {
        $this->vtsRec = $vtsRec;
    }

    /**
     * @return float|null
     */
    public function getVtsNic(): ?float
    {
        return $this->vtsNic;
    }

    /**
     * @param float|null $vtsNic
     */
    public function setVtsNic(?float $vtsNic): void
    {
        $this->vtsNic = $vtsNic;
    }

    /**
     * @return float|null
     */
    public function getVtsLac(): ?float
    {
        return $this->vtsLac;
    }

    /**
     * @param float|null $vtsLac
     */
    public function setVtsLac(?float $vtsLac): void
    {
        $this->vtsLac = $vtsLac;
    }

    /**
     * @return float|null
     */
    public function getVtsOxy(): ?float
    {
        return $this->vtsOxy;
    }

    /**
     * @param float|null $vtsOxy
     */
    public function setVtsOxy(?float $vtsOxy): void
    {
        $this->vtsOxy = $vtsOxy;
    }

    /**
     * @return float|null
     */
    public function getVtsSat(): ?float
    {
        return $this->vtsSat;
    }

    /**
     * @param float|null $vtsSat
     */
    public function setVtsSat(?float $vtsSat): void
    {
        $this->vtsSat = $vtsSat;
    }

    /**
     * @return float|null
     */
    public function getVtsRr(): ?float
    {
        return $this->vtsRr;
    }

    /**
     * @param float|null $vtsRr
     */
    public function setVtsRr(?float $vtsRr): void
    {
        $this->vtsRr = $vtsRr;
    }

    /**
     * @return float|null
     */
    public function getVtsPp(): ?float
    {
        return $this->vtsPp;
    }

    /**
     * @param float|null $vtsPp
     */
    public function setVtsPp(?float $vtsPp): void
    {
        $this->vtsPp = $vtsPp;
    }

    /**
     * @return float|null
     */
    public function getVtsMap(): ?float
    {
        return $this->vtsMap;
    }

    /**
     * @param float|null $vtsMap
     */
    public function setVtsMap(?float $vtsMap): void
    {
        $this->vtsMap = $vtsMap;
    }

    /**
     * @return string|null
     */
    public function getVtsBp(): ?string
    {
        return $this->vtsBp;
    }

    /**
     * @param string|null $vtsBp
     */
    public function setVtsBp(?string $vtsBp): void
    {
        $this->vtsBp = $vtsBp;
    }

    /**
     * @return \DateTime|null
     */
    public function getVtsTim(): ?\DateTime
    {
        return $this->vtsTim;
    }

    /**
     * @param \DateTime|null $vtsTim
     */
    public function setVtsTim(?\DateTime $vtsTim): void
    {
        $this->vtsTim = $vtsTim;
    }

    /**
     * @return \DateTime|null
     */
    public function getVtsDat(): ?\DateTime
    {
        return $this->vtsDat;
    }

    /**
     * @param \DateTime|null $vtsDat
     */
    public function setVtsDat(?\DateTime $vtsDat): void
    {
        $this->vtsDat = $vtsDat;
    }

    /**
     * @return int
     */
    public function getId(): int
    {
        return $this->id;
    }

    /**
     * @param int $id
     */
    public function setId(int $id): void
    {
        $this->id = $id;
    }


    public function getCvsIde()
    {
        return $this->cvsIde;
    }

    public function setCvsIde(CrfCvs $cvsIde)
    {
        $this->cvsIde = $cvsIde;
    }

}

CvsUlt

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * CvsUlt
 *
 * @ORM\Table(name="CVS_ULT", uniqueConstraints={@ORM\UniqueConstraint(name="id", columns={"id"})})
 * @ORM\Entity
 */
class CvsUlt
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")\
     */
    private $id;

    /**
     * @var string|null
     *
     * @ORM\Column(name="ULT_ISS", type="string", length=255, nullable=true)
     */
    private $ultIss;

    /**
     * @var float|null
     *
     * @ORM\Column(name="ULT_PLE_EFF", type="float", precision=10, scale=0, nullable=true)
     */
    private $ultPleEff;

    /**
     * @var float|null
     *
     * @ORM\Column(name="ULT_ASC", type="float", precision=10, scale=0, nullable=true)
     */
    private $ultAsc;

    /**
     * @var string|null
     *
     * @ORM\Column(name="ULT_NAM", type="string", length=255, nullable=true)
     */
    private $ultNam;

    /**
     * @var float|null
     *
     * @ORM\Column(name="ULT_TIM", type="float", precision=10, scale=0, nullable=true)
     */
    private $ultTim;

    /**
     * @var \DateTime|null
     *
     * @ORM\Column(name="ULT_DAT", type="datetime", nullable=true)
     */
    private $ultDat;


    /**
     * @ORM\ManyToOne(targetEntity="CrfCvs",cascade={"persist"},inversedBy="cvsUlt")
     * @ORM\JoinColumn(name="CVS_IDE", referencedColumnName="CVS_IDE")
     */
    private $cvsIde;

    public function __construct()
    {
        $this->cvsIde = new CrfCvs();
    }

    /**
     * @return number
     */
    public function getId()
    {
        return $this->id;
    }


    public function getUltIss()
    {
        return $this->ultIss;
    }


    public function getUltPleEff()
    {
        return $this->ultPleEff;
    }


    public function getUltAsc()
    {
        return $this->ultAsc;
    }


    public function getUltNam()
    {
        return $this->ultNam;
    }


    public function getUltTim()
    {
        return $this->ultTim;
    }


    public function getUltDat()
    {
        return $this->ultDat;
    }



    public function getCvsIde()
    {
        return $this->cvsIde;
    }


    public function setId($id)
    {
        $this->id = $id;
    }


    public function setUltIss($ultIss)
    {
        $this->ultIss = $ultIss;
    }


    public function setUltPleEff($ultPleEff)
    {
        $this->ultPleEff = $ultPleEff;
    }


    public function setUltAsc($ultAsc)
    {
        $this->ultAsc = $ultAsc;
    }


    public function setUltNam($ultNam)
    {
        $this->ultNam = $ultNam;
    }


    public function setUltTim($ultTim)
    {
        $this->ultTim = $ultTim;
    }


    public function setUltDat($ultDat)
    {
        $this->ultDat = $ultDat;
    }


    public function setCvsIde($cvsIde)
    {
        $this->cvsIde = $cvsIde;
    }

}


And my CrfCvsType is like this :

<?php

namespace App\Form;

use App\Entity\CrfCvs;
use ICanBoogie\Inflector;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use function ICanBoogie\downcase;

class CrfCvsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $binary = array('Yes' => 1, 'No' => 0);
        $inflector = Inflector::get();
        $this->comments = $options['comments'];

        foreach ($this->comments as $comment) {
            if ($comment->getName() !== "CVS_IDE") {
                switch ($comment->getName()) {
                    case 'CVS_END_DAT':
                    case 'CVS_LAS_ID':
                    case 'CVS_OXF_ID':
                    case 'CVS_NUM_DAY':
                    case 'CVS_HEA_HB':
                    case 'CVS_HEA_HCT':
                    case 'CVS_END_RHI':
                    case 'CVS_END_ISS':
                    case 'CVS_DAY':
                        $builder
                            ->add($inflector->camelize(downcase($comment->getName()), Inflector::DOWNCASE_FIRST_LETTER), null, array('label' => $comment->getComment(), 'required' => true));
                        break;
                    case 'CVS_BLO_DRA':
                    case 'CVS_ECG':
                        $builder
                            ->add(
                                $inflector->camelize(downcase($comment->getName()), Inflector::DOWNCASE_FIRST_LETTER),
                                ChoiceType::class, array(
                                    'label' => $comment->getComment(),
                                    'required' => false,
                                    'choices' => $binary,
                                    'placeholder' => 'Choisir une valeur',
                                )
                            );
                        break;
                }
            }
        }
        $builder->add('cvsVts', CollectionType::class, [
            'entry_type' => CvsVtsType::class,
            'entry_options' => ['label' => false],
            'allow_add' => true,
            'prototype' => true,
            'by_reference' => false
        ]);

        $builder->add('cvsUlt', CollectionType::class, [
            'entry_type' => CvsUltType::class,
            'entry_options' => ['label' => false],
            'allow_add' => true,
            'prototype' => true,
            'by_reference' => false
        ]);

        $builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
            /** @var CrfCvs */
            $crf_cvs = $event->getData();
            //dd($crf_cvs);
        });
        $builder->add('Enregistrer',SubmitType::class);
            //->add('cvsUlt')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => CrfCvs::class,
            'comments' => null,
        ]);
    }
}

I've use embedded Form with Macros and javascript to generate the form.At this step all work very well,But when i try to submit the form,Only the CvsUlt related object is persist,the CvsVts show me this Error :

ORMException HTTP 500 Internal Server Error Entity of type App\Entity\CrfCvs is missing an assigned ID for field 'cvsIde'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.

the Controller code:

 public function new(Request $request, CrfCvsRepository $crfCvsRepository, SequenceGenerator $sequenceGenerator)
    {

        $this->denyAccessUnlessGranted('ROLE_SAISIE', null, 'Unable to access this page!');
        //On recupère les commentaires de la table pour Afichage
        //--------------------------------------------------------

        $columns = $crfCvsRepository->getColumsComments();
        $pat = $request->attributes->get('pat');
        $crfcvs = new CrfCvs();

        $crf_cvs_form = $this->createForm(CrfCvsType::class, $crfcvs, array(
            'comments' => $columns
        ));
        //dd($crf_cvs_form);
        //dd($request);
        $crf_cvs_form->handleRequest($request);
        if ($crf_cvs_form->isSubmitted() && $crf_cvs_form->isValid()) {
            //dd($request);
            //Génération de la clé primaire de la table
            $em = $this->getDoctrine()->getManager();

            //---------------------------------------------------------------------------
            if ($lastid_value = $crfCvsRepository->findLast()) {
                $crfcvs->setCvsIde($sequenceGenerator->getNextKey($lastid_value[0]->getCvsIde()));
            } else {
                $crfcvs->setCvsIde("CVS_00000001");
            }
            $crfcvs->setCvsLasId($pat);
            //---------------------------------------------------------------------------
            //dd($crfcvs);

            $em->persist($crfcvs);
            $em->flush();
            return $this->redirectToRoute('patient', ['pat' => $this->get('session')->get('pat')]);
        }

        return $this->render('crf_cvs/new.html.twig', [
            'crf_cvs' => $crfcvs,
            'form' => $crf_cvs_form->createView(),
            'pat' => $pat,
            'comments' => $columns
        ]);
    }

Please help me to solve this.

Upvotes: 0

Views: 301

Answers (1)

Gary Houbre
Gary Houbre

Reputation: 880

You need change your strategy annotation from your cvsIde.

/**
 * @ORM\Column(name="CVS_IDE", type="string", length=255, nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="NONE")
 */

Link : https://github.com/KnpLabs/DoctrineBehaviors/issues/45

Upvotes: 0

Related Questions