Symfony 4-数据库注册时实体为空

Symfony 4-数据库注册时实体为空,symfony,doctrine,entity,symfony4,Symfony,Doctrine,Entity,Symfony4,我是一个Symfony初学者,已经在这个问题上停留了一段时间。我有两个具有多对一关系的实体(Mairie和Ville)。Ville是一个导入的表,预先填充了信息。在表单中,用户创建一个Mairie实例,并使用表单数据找到要绑定的Ville 问题是:创建Mairie时,doctrine确实会找到Ville对象,但当我想将其设置为Mairie对象时,它会被置空。这是我的代码,在控制器中: if($formMairie->isSubmitted() && $formMai

我是一个Symfony初学者,已经在这个问题上停留了一段时间。我有两个具有多对一关系的实体(Mairie和Ville)。Ville是一个导入的表,预先填充了信息。在表单中,用户创建一个Mairie实例,并使用表单数据找到要绑定的Ville

问题是:创建Mairie时,doctrine确实会找到Ville对象,但当我想将其设置为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);
这不起作用,Mairie的Ville属性设置为null,刷新时没有错误

        $mairieVille = $mairie->getVilles();
        dump($mairieVille);
返回null

为什么对象没有注册?我认为这可能是一个SQL问题,因为我已经导入了Ville表,但是我找不到任何东西。我用这种方法将其他实体绑定在一起,直到现在我还没有遇到任何问题。。。以下是我的两个实体以获取更多信息(不包括getter和setter):

维尔

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;
Mairie

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;
}
函数的作用是在Mairie中设置$this->villes,而不是$this->ville

: 绒毛的功能

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

$this->ville=$ville

因为带有S的属性“Villes”似乎不存在

因此,功能应该是:

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

    return $this;
}

能否添加上面Mairie实体的getVilles()和setVilles()方法?添加在Mairie代码的末尾。