Нераспознанное поле при вставке в отношение ManyToMany в Symfony - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь сделать флеш со многими отношениями, но у меня есть ошибка, которая говорит мне "нераспознанное поле: страхование".

Я хотел бы зарегистрировать одну или две страховки, которые докторвыбрал, но у меня есть ошибки во время сброса с множеством отношений, которые существуют между врачом и страховкой

Сущность Медецин

  /**
 * @ORM\ManyToMany(targetEntity="Doctix\MedecinBundle\Entity\Assurance", cascade={"persist", "remove"}, inversedBy="medecin")
 * @ORM\JoinColumn(nullable=true)
 */
private $assurance;

 /**
 * Add assurance
 *
 * @param \Doctix\MedecinBundle\Entity\Assurance $assurance
 *
 * @return Medecin
 */
public function addAssurance(\Doctix\MedecinBundle\Entity\Assurance $assurance)
{

     $assurance->addMedecin($this);   
    $this->assurances[] = $assurance;


}

/**
 * Remove assurance
 *
 * @param \Doctix\MedecinBundle\Entity\Assurance $assurance
 */
public function removeAssurance(\Doctix\MedecinBundle\Entity\Assurance $assurance)
{
    $this->assurance->removeElement($assurance);
}

СущностьСтрахование

  /**
 * 
 * @ORM\ManyToMany(targetEntity="Doctix\MedecinBundle\Entity\Medecin", mappedBy="assurance")
 */
private $medecin;

  /**
 * Add medecin
 *
 * @param \Doctix\MedecinBundle\Entity\Medecin $medecin
 *
 * @return Assurance
 */
public function addMedecin(\Doctix\MedecinBundle\Entity\Medecin $medecin)
{

    $this->medecins[] = $medecin;
}

/**
 * Remove medecin
 *
 * @param \Doctix\MedecinBundle\Entity\Medecin $medecin
 */
public function removeMedecin(\Doctix\MedecinBundle\Entity\Medecin $medecin)
{
    $this->medecin->removeElement($medecin);
}

Веточка

    <div class="col-md-6">
                        <select id="assurance" class="form-control" placeholder="Assurance" name="assurance" multiple required>
                            <option value="">Assurance *</option>

                               {% for assur in assurances %}

                                <option value="{{ assur.nom }}" >{{ assur.nom|upper }}</option>


                            {% endfor %}
                        </select>
                    </div>

Контроллер , где я пытаюсь получить выбранное значение

    public function editAction(Request $request)
{
    $user = $this->getUser();
    if ($user === null) {
        throw new NotFoundHttpException('Utilisateur Inexistant');
    }

    $em = $this->getDoctrine()->getManager();
    $repo = $em->getRepository('DoctixMedecinBundle:Medecin');
    $specialiteRepo = $em->getRepository('DoctixAdminBundle:Specialite');

    $assuranceRepo = $em->getRepository('DoctixMedecinBundle:Assurance');

    $medecin = $repo->findOneBy(array(
        'user' => $user,
    ));

    if ($request->isMethod('POST')) {

        if ( ($pass = $request->get('pass')) != ''){
            $medecin->getUser()->setSalt('');
            $factory = $this->get('security.encoder_factory');
            $encoder = $factory->getEncoder($medecin->getUser());
            $password_encoder = $encoder->encodePassword($pass, $medecin->getUser()->getSalt());
            $medecin->getUser()->setPassword($password_encoder);
        }

        $medecin->setSpecialite($specialiteRepo->find($request->get('specialite')));
        $medecin->getUser()->setAdresse($request->get('adresse'));
        $medecin->getUser()->setNumTel($request->get('telephone'));
        $medecin->setQuartier($request->get('quartier'));
        $medecin->addAssurance($assuranceRepo->findOneBy(array(

            'assurance' => $request->get('assurance'))));

        // Save
        $em->flush();

        // redirection avec le status http 301 ::)))))
        $url = $this->generateUrl('medecin_parametre');
        return $this->redirect($url, 301);

    } else {
        return $this->render('DoctixMedecinBundle:Medecin:editProfile.html.twig', array(
            'medecin' => $medecin,
            'specialites' => $specialiteRepo->findAll(),
            'assurances' => $assuranceRepo->findAll()
        ));
    }
}

Но у меня появляется ошибка "Нераспознанное поле: гарантия", когда я пытаюсь сбросить

захват моего ormexception

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

наконец-то я нашел решение моей проблемы с резервным копированием в моих отношениях ManyToMany, я внес изменения в свои две сущности, на уровне коллекций моих сущностей.

Entity Medecin

   /**
 * Add assurance
 *
 * @param \Doctix\MedecinBundle\Entity\Assurance $assurance
 *
 * @return Medecin
 */
public function addAssurance(\Doctix\MedecinBundle\Entity\Assurance $assurance)
{
             if (!$this->assurance->contains($assurance))
    {
        $this->assurance->add($assurance);
        $assurance->addMedecin($this);
    }
 }

  /**
 * Remove assurance
 *
 * @param \Doctix\MedecinBundle\Entity\Assurance $assurance
 */
public function removeAssurance(\Doctix\MedecinBundle\Entity\Assurance $assurance)
{
         if ($this->assurance->contains($assurance))
    {
        $this->assurance->removeElement($assurance);
        $assurance->removeMedecin($this);
    } 
 }

Entity Assurance

   /**
 * Add medecin
 *
 * @param \Doctix\MedecinBundle\Entity\Medecin $medecin
 *
 * @return Assurance
 */
public function addMedecin(\Doctix\MedecinBundle\Entity\Medecin $medecin)
{
         if (!$this->medecin->contains($medecin))
    {
        $this->medecin->add($medecin);
        $medecin->addAssurance($this);
    }
  }

  /**
 * Remove medecin
 *
 * @param \Doctix\MedecinBundle\Entity\Medecin $medecin
 */
public function removeMedecin(\Doctix\MedecinBundle\Entity\Medecin $medecin)
{ 
        if ($this->medecin->contains($medecin))
    {
        $this->medecin->removeElement($medecin);
        $medecin->removeAssurance($this);
    }

 }

Большое спасибо за вашу помощь

0 голосов
/ 13 декабря 2018

Я вижу некоторые вещи:

1 - Когда вы используете многие-ко-многим, вам нужно определить объединяющую таблицу между двумя сущностями. многие-ко-многим .

2 - Поля ваших коллекций - это заверения и лекарства (наконец, с 's').

$ this-> assurance s -> removeElement ($ assurance);

$ this-> medecin s -> removeElement ($ medecin);

3- Ваша ошибка в том, чтовы выполняете поиск (findOneBy) на assuranceRepo в организации Assurance, и у этого объекта нет поля доверия.У медицины есть поле доверия.

$medecin->addAssurance(
          $assuranceRepo->findOneBy(array(
            'assurance' => $request->get('assurance'))));

до

$medecin->addAssurance(
              $assuranceRepo->findOneBy(array(
                'name' => $request->get('assurance'))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...