SQLSTATE [42S22]: столбец не найден

Я создал Formtype UniversitaireType, но у меня есть эта ошибка:

введите описание изображения здесь

attribut condidat_id не создается в базе данных, когда я пытаюсь выполнить команду php bin / console doctrine: schema: update —force (все атрибуты создаются в базе данных, кроме id_condidat) .. Я делаю сопоставление OneToMany $ condidat в Universitaire объекта

код объекта:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use AppBundle\Entity\Condidat;

/**
* Universitaire.
*
* @ORM\Table(name="universitaires")
* @ORM\Entity(repositoryClass="AppBundle\Entity\UniversitaireEntityRepository")
*/
class Universitaire
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="date_start", type="string", length=255, nullable=true)
*/
private $dateStart;

/**
* @var string
*
* @ORM\Column(name="date_end", type="string", length=255, nullable=true)
*/
private $dateEnd;

/**
* @var string
*
* @ORM\Column(name="establishment", type="string", length=255, nullable=true, unique=true)
*/
private $establishment;/**
* @var string
*
* @ORM\Column(name="diploma", type="string", length=255, nullable=true, unique=true)
*/
private $diploma;

/**
*@ORM\OneToMany(targetEntity="AppBundle\Entity\Condidat",mappedBy="id_universitaire",cascade={"persist"})
*@ORM\JoinColumn(name="id_condidat", referencedColumnName="id")
*/
private $condidat;

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

/**
* Add Condidat
*
* @param \AppBundle\Entity\Condidat $condidat
* @return Universitaire
*/
public function addCondidat(\AppBundle\Entity\Condidat $condidat)
{
$this->condidat[] = $condidat;

return $this;
}

/**
* Remove Condidat
*
* @param \AppBundle\Entity\Condidat $condidat
*/
public function removeCondidat(\AppBundle\Entity\Condidat $condidat)
{
$this->Condidat->removeElement($condidat);
}

/**
* Get Condidat
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCondidat()
{
return $this->condidat;
}/**
* Set dateStart.
*
* @param string $dateStart
*
* @return Universitaire
*/
public function setdateStart($dateStart)
{
$this->dateStart = $dateStart;

return $this;
}

/**
* Get dateStart.
*
* @return string
*/
public function getdateStart()
{
return $this->dateStart;
}

/**
* Set dateEnd.
*
* @param string $dateEnd
*
* @return Universitaire
*/
public function setDateEnd($dateEnd)
{
$this->dateEnd = $dateEnd;

return $this;
}

/**
* Get dateEnd.
*
* @return string
*/
public function getdateEnd()
{
return $this->dateEnd;
}

/**
* Set establishment.
*
* @param string $establishment
*
* @return Universitaire
*/
public function setEstablishment($establishment)
{
$this->establishment = $establishment;

return $this;
}

/**
* Get establishment.
*
* @return string
*/
public function getEstablishment()
{
return $this->establishment;
}

/**
* Set diploma.
*
* @param string $diploma
*
* @return Universitaire
*/
public function setDiploma($diploma)
{
$this->diploma = $diploma;

return $this;
}

/**
* Get diploma.
*
* @return string
*/
public function getDiploma()
{
return $this->diploma;
}

public function __construct()
{
$this->ResponsableCategory = new \Doctrine\Common\Collections\ArrayCollection();
}

}

код FormType:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use AppBundle\Entity\Universitaire;
use AppBundle\Entity\Condidat;

class UniversitaireType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('dateStart')->add('dateEnd')->add('establishment')->add('diploma')
->add('condidat',null, array(
'class' => 'AppBundle:Condidat',
'choice_label' => 'condidat',));
}

/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Universitaire',
"csrf_protection" => "false"));
}

/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_universitaire';
}}

2

Решение

У вас есть две ошибки в вашей собственности «condidat».

  1. Вы использовали один-ко-многим (двунаправленный). Если вы хотите иметь только один
    кандидат в «Университет» — тогда вы должны использовать One-To-One (Двунаправленный).

    class Universitaire
    {
    
    ## ...
    
    /**
    * Bidirectional One-To-One (Owning Side)
    *
    * @ORM\OneToOne(
    *     targetEntity="AppBundle\Entity\Condidat",
    *     inversedBy="universitaire",
    *     cascade={"persist", "remove"}
    *     )
    * @ORM\JoinColumn(
    *     name="condiat_id",
    *     referencedColumnName="id"*     )
    */
    private $condidat;
    
    class Condidat
    {
    
    ## ...
    
    /**
    * Bidirectional One-To-One (Inversed Side)
    *
    * @ORM\OneToOne(
    *     targetEntity="AppBundle\Entity\Universitaire",
    *     mappedBy="condidat",
    *     )
    */
    private $universitaire;
    
  2. Если нет, и One-To-Many был именно тем, что вы хотели иметь, чем вы должны установить в своем __construct() что «condidat» является коллекцией массивов

    public function __construct()
    {
    $this->condidat = new \Doctrine\Common\Collections\ArrayCollection();
    }
    

    Если бы я был тобой, я бы предпочел использовать «кандидатов» с «s» — чтобы показать, что это arrayCollection.

  3. Как я уже сказал, ваш пример — двунаправленный «один ко многим». В этом случае мы используем mappedBy и inversedBy. Сущность, в которой вы устанавливаете столбец Join, является владельцем. И, конечно, JoinColumn должен быть в сущности «Кандидат». Так:

    class Universitaire
    {
    
    ## ...
    
    /**
    * Bidirectional One-To-Many (Owning Side)
    * Predicate: One Universitaire can have a lot of candidates
    *
    * @ORM\OneToMany(
    *     targetEntity="AppBundle\Entity\Condidat",
    *     mappedBy="universitaire",
    *     cascade={"persist", "remove"}
    *     )
    */
    private $condidats;
    
    class Condidat
    {
    
    ## ...
    
    /**
    * Bidirectional Many-To-One (Owning Side)
    * Predicate: Each Condidat belongs to one Universitaire
    *
    * @ORM\ManyToOne(
    *     targetEntity="AppBundle\Entity\Universitaire",
    *     inversedBy="condidats",
    *     )
    * @ORM\JoinColumn(
    *     name="universitaire_id",
    *     referencedColumnName="id",
    *     onDelete="SET NULL"*      )
    */
    private $universitaire;
    

я добавил onDelete="SET NULL", Если вы удалите universitaire, то в поле universitaire каждого «condidate» вы увидите нулевое значение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector