Symfony 4 - сущность обнуляется при регистрации в базе данных

Я новичок в Symfony и какое-то время застрял в этом вопросе. У меня есть две сущности (Мэри и Вилле) с отношением «многие к одному». Ville - это импортированная таблица, предварительно заполненная информацией. В форме пользователь создает экземпляр Mairie и с помощью данных формы находит виллу для привязки.

Проблема в том, что доктрина действительно находит объект Ville при создании Mairie, но когда я хочу установить его для объекта Mairie, он обнуляется. Вот мой код в контроллере:

    if ($formMairie->isSubmitted() && $formMairie->isValid())
    {
        $repoMairie = $this->getDoctrine()->getRepository(Mairie::class);
        $repoVilles = $this->getDoctrine()->getRepository(Villes::class);

        $inseeInput = $mairie->getInsee();

        $ville = $repoVilles->findOneBy(array("ville_code_commune" => $inseeInput));
        dump($ville); 

Этот дамп работает: он находит правильный экземпляр Ville в базе данных и возвращает объект, заполненный правильными свойствами.

        $mairie->setVilles($ville);

Это не работает, свойство Ville Mairie имеет значение null, и я не получаю ошибок при сбросе.

        $mairieVille = $mairie->getVilles();
        dump($mairieVille);

Возвращает null.

Почему объект не зарегистрирован? Я подумал, что это может быть проблема SQL, так как я импортировал таблицу Вилле, но ничего не могу найти. Я использовал этот метод для связывания других сущностей вместе, и до сих пор у меня не было проблем ... Вот мои две сущности для получения дополнительной информации (геттеры и сеттеры не включены):

Вилле:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Villes
*
* @ORM\Table(name = "villes")
* @ORM\Entity
*/
 class Villes
{
/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "IDENTITY")
 */
private $id;

/**
 * @var int
 *
 * @ORM\Column(name = "ville_id", type = "integer", nullable=false)
 */
private $ville_id;

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

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

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

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

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

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

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

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

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

/**
 * @var string
 *
 * @ORM\Column(name = "ville_code_commune", type = "string", length=5, nullable=false)
 */
private $ville_code_commune;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_arrondissement", type = "integer", nullable=true)
 */
private $ville_arrondissement;

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

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_amdi", type = "integer", nullable=true)
 */
private $ville_amdi;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_population_2010", type = "integer", nullable=true)
 */
private $ville_population_2010;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_population_1999", type = "integer", nullable=true)
 */
private $ville_population_1999;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_population_2012", type = "integer", nullable=true)
 */
private $ville_population_2012;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_densite_2010", type = "integer", nullable=true)
 */
private $ville_densite_2010;

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

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

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

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

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

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

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

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_zmin", type = "integer", nullable=true)
 */
private $ville_zmin;

/**
 * @var int|null
 *
 * @ORM\Column(name = "ville_zmax", type = "integer", nullable=true)
 */
private $ville_zmax;

Мэри

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Validator\Constraints as Assert;


/**
 * Mairie
 *
 * @ORM\Table(name = "mairie", uniqueConstraints = {@ORM\UniqueConstraint(name = "UNIQ_3946A254A73F0036", columns = {"ville_id"})}, indexes = {@ORM\Index(name = "IDX_3946A254CF94313", columns = {"office_tourisme_id"})})
 * @ORM\Entity
 */
class Mairie
{
/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "IDENTITY")
 */
private $id;

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

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

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

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

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_maire_nom", type = "string", length=255, nullable=false)
 */
private $mairieMaireNom;

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_maire_prenom", type = "string", length=255, nullable=false)
 */
private $mairieMairePrenom;

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

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

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

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

/**
 * @var int
 *
 * @ORM\Column(name = "mairie_telephone_contact", type = "integer", nullable=false)
 */
private $mairieTelephoneContact;

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_email_contact", type = "string", length=255, nullable=false)
 */
private $mairieEmailContact;

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_latitude", type = "string", length=255, nullable=false)
 */
private $mairieLatitude;

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_longitude", type = "string", length=255, nullable=false)
 */
private $mairieLongitude;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @var \DateTime
 *
 * @ORM\Column(name = "mairie_date_inscription", type = "datetime", nullable=false)
 */
private $mairieDateInscription;

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

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

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_slug", type = "string", length=255, nullable=false)
 */
private $mairieSlug;

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

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_adresse", type = "string", length=255, nullable=false)
 */
private $mairieAdresse;

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

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_postal_code", type = "string", length=10, nullable=false)
 */
private $mairiePostalCode;

/**
 * @var string
 *
 * @ORM\Column(name = "mairie_commune", type = "string", length=255, nullable=false)
 */
private $mairieCommune;

/**
 * @var \Villes
 *
 * @ORM\ManyToOne(targetEntity = "Villes")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name = "ville_id", referencedColumnName = "id")
 * })
 */
private $ville;

/**
 * @var \OfficeTourisme
 *
 * @ORM\ManyToOne(targetEntity = "OfficeTourisme")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name = "office_tourisme_id", referencedColumnName = "id")
 * })
 */
private $officeTourisme;

public function __construct()
{
    $this->user_id_heb = new ArrayCollection();
    $this->hebergements = new ArrayCollection();
    $this->mairie_id_user = new ArrayCollection();
    $this->user = new ArrayCollection();
    $this->hebergement = new ArrayCollection();
}

public function getVilles(): ?Villes
{
    return $this->ville;
}
public function setVilles(?Villes $villes): self
{
    $this->villes = $villes;
    return $this;
}

Не могли бы вы добавить методы getVilles () и setVilles () вашей сущности Mairie выше?

Phil Rennie 27.06.2018 12:36

Добавлен в конце кода Мэри.

Malix 27.06.2018 12:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
117
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваша функция setVilles () устанавливает $ this-> villes, а не $ this-> ville

Ответ принят как подходящий

В Мэри: Функция setVilles

public function setVilles(?Villes $villes): self
{
    $this->villes = $villes;
    return $this;
}

Не должно быть:

$this->ville = $ville;

Потому что свойства "Villes" с буквой S, похоже, не существует.

Итак, функция должна быть:

public function setVille(?Ville $ville): self
{
    $this->ville = $ville;

    return $this;
}

Другие вопросы по теме