«make: entity --regenerate» создает неправильную (?) функцию - PullRequest
1 голос
/ 05 марта 2019

В настоящее время я следую учебному пособию по Symfony и дошел до двунаправленных отношений Doctrine (извините, если используемые мной термины неверны, я не являюсь носителем английского языка). Моя модель основана на объявлении (один-ко-многим), которое отображает массив приложений (многие-к-одному), созданных для этой рекламы. Таким образом, приложение должно быть связано с рекламой, следовательно, nullable false:

class Application
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Advert", inversedBy="applications")
     * @ORM\JoinColumn(nullable=false)
     */
    private $advert;

    //
}

И я добавил атрибут $applications в свой класс объявлений:

class Advert
{ 
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Application", mappedBy="advert")
     */
    private $applications;

    //
}

Но когда я использую php bin/console make:entity --regenerate, чтобы получить функцию removeApplication(), код, который я получаю, выглядит следующим образом:

public function removeApplication(Application $application): self
{
    if ($this->applications->contains($application)) {
        $this->applications->removeElement($application);
        // set the owning side to null (unless already changed)
        if ($application->getAdvert() === $this) {
            $application->setAdvert(null);
        }
    }

    return $this;
}

Функция устанавливает для $advert приложения значение null, в то время как для этого атрибута явно установлено значение nullable = false. Я заметил это несоответствие, потому что я использую Symfony 4, тогда как учебник, которому я следую, основан на более старой версии, поэтому функции, сгенерированные в учебнике, были намного проще и не обрабатывали атрибут $advert.

Есть идеи, почему это происходит и может ли это вызвать ошибку позже в моем проекте? Дайте мне знать, если вам нужно больше кусков кода, чтобы понять проблему.

1 Ответ

0 голосов
/ 06 марта 2019

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

Может быть, попробуйте orphanRemoval на стороне отношения Advert, было бы интересно, что будет потом:

class Advert
{ 
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Application", mappedBy="advert", orphanRemoval=true)
     */
    private $applications;
}
...