Symfony 4 ORMException - PullRequest
       41

Symfony 4 ORMException

0 голосов
/ 24 февраля 2020

Здравствуйте, я столкнулся с этим исключением:

У объекта типа App \ Entity \ CrfCvs отсутствует назначенный идентификатор для поля 'cvsIde'. Стратегия генерации идентификатора для этого объекта требует, чтобы поле ID было заполнено до вызова EntityManager # persist (). Если вы хотите вместо этого автоматически генерируемые идентификаторы, вам нужно соответствующим образом настроить отображение метаданных.

У меня есть объект CrfCvs, у которого есть два связанных объекта: CvsVts и CvsUtl, например: 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;
    }

}


И мой CrfCvsType является как это:

<?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,
        ]);
    }
}

Я использую встроенную форму с макросами и javascript для генерации формы. На этом этапе все работает очень хорошо, но когда я пытаюсь отправить форму, только CvsUlt связаны объект сохраняется, CvsVts показывает мне эту ошибку:

ORMException HTTP 500 Внутренняя ошибка сервера У объекта типа App \ Entity \ CrfCvs отсутствует назначенный идентификатор для поля 'cvsIde'. Стратегия генерации идентификатора для этого объекта требует заполнения поля ID до вызова EntityManager # persist (). Если вы хотите вместо этого автоматически генерируемые идентификаторы, вам необходимо соответствующим образом настроить отображение метаданных.

Код контроллера :

 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
        ]);
    }

Пожалуйста, помогите мне решить эту проблему .

1 Ответ

0 голосов
/ 24 февраля 2020

Вам нужно изменить аннотацию своей стратегии на свой cvsIde.

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

Ссылка: https://github.com/KnpLabs/DoctrineBehaviors/issues/45

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...