当我尝试从我的实体"Facture"学说中添加对象时,不会更新对象"Dechet"。插入工作正常,但在我的表中 Dechet 我没有来自我的对象(Facture(的外键:
if($dechetVert>$CorrecteurDechetVert || $Encombrants>$CorrecteurEncombrants || $Bois>$CorrecteurBois ||
$Brique>$CorrecteurBrique || $Terre>$CorrecteurTerre) {
$time = new DateTime('now');
$Facture = new Facture();
$Facture->setDate($time);
$Facture->setStatut('Impayé');
$repository = $em->getRepository('BundlesUserBundleEntityUser');
$menage = $repository->findOneById($UserId);
$repository = $em->getRepository('BundlesMainBundleEntityTypeDechet');
$type =$repository->findBy(array('Nom'=>$Type));
$repository = $em->getRepository('BundlesMainBundleEntityDechet');
$DechetsSelectionne = $repository->getDechetByMenageAndType($menage,$type);
$Facture->setUtilisateur($menage);
$Facture->setDechets($DechetsSelectionne);
$em->persist($Facture);
$em->flush();
$em->clear();
Entity Dechet :
<?php
namespace BundlesMainBundleEntity;
use DoctrineORMMapping as ORM;
use SensioBundleGeneratorBundleModelBundle;
use BundlesMainBundleEntity;
/**
* Dechet
*
* @ORMTable(name="dechet")
* @ORMEntity(repositoryClass="BundlesMainBundleEntityDechetRepository")
*/
class Dechet
{
/**
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(name="volume", type="float", precision=4, scale=1)
*/
private $Volume;
/**
* @ORMColumn(name="datedepot", type="date")
*/
private $dateDepot;
/**
* @ORMManyToOne(
* targetEntity="BundlesUserBundleEntityuser",
* inversedBy="Dechets",
* )
*/
private $Menage;
/**
* @ORMManyToOne(
* targetEntity="BundlesMainBundleEntityConteneur",
* inversedBy="Dechets"
* )
*/
private $Conteneur;
/**
* @ORMManyToOne(
* targetEntity="BundlesMainBundleEntityTypeDechet",
* inversedBy="Dechets"
* )
*/
private $Type;
/**
* @ORMManyToOne(
* targetEntity="BundlesMainBundleEntityFacture",
* inversedBy="Dechets",
* )
*/
private $Facture;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getVolume (){
return $this->Volume;
}
public function setVolume ($Volume){
$this->Volume = $Volume;
return $this;
}
/**
* @return DateTime
*/
public function getDate (){
return $this->dateDepot;
}
public function setDate ($dateDepot){
$this->dateDepot = $dateDepot;
return $this;
}
/**
* Get Menage
* @return BundlesUserBundleEntityuser
*/
public function getMenage(){
return $this->Menage;
}
public function setMenage ($Menage){
$this->Menage = $Menage;
return $this;
}
/**
* Get Conteneur
* @return BundlesMainBundleEntityConteneur
*/
public function getConteneur(){
return $this->Conteneur;
}
public function setConteneur ($Conteneur){
$this->Conteneur = $Conteneur;
return $this;
}
/**
* Get Type
* @return BundlesMainBundleEntityTypeDechet
*/
public function getType(){
return $this->Type;
}
public function setType ($Type){
$this->Type = $Type;
return $this;
}
/**
* Get Facture
* @return BundlesMainBundleEntityFacture
*/
public function getFacture(){
return $this->Facture;
}
public function setFacture ($Facture){
$this->Facture = $Facture;
return $this;
}
}
Entity Facture :
<?php
namespace BundlesMainBundleEntity;
use DoctrineDBALTypesIntegerType;
use DoctrineORMMapping as ORM;
/**
* Facture
*
* @ORMTable(name="facture")
* @ORMEntity()
*/
class Facture
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMManyToOne(
* targetEntity="BundlesUserBundleEntityuser",
* inversedBy="Factures"
* )
*/
private $Utilisateur;
/**
* @ORMOneToMany(
* targetEntity="BundlesMainBundleEntityDechet",
* mappedBy="Facture",
* cascade={"all"}
* )
*/
private $Dechets;
/**
* @ORMColumn(type="string")
*/
private $Statut;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @ORMColumn(name="Date", type="date")
*/
private $Date;
/**
* Get Utilisateur
* @return BundlesUserBundleEntityuser
*/
public function getUtilisateur(){
return $this->Utilisateur;
}
public function setUtilisateur($Utilisateur){
$this->Utilisateur = $Utilisateur;
return $this;
}
public function getDechets(){
return $this->Dechets;
}
public function setDechets($Dechets){
$this->Dechets = $Dechets;
return $this;
}
public function getStatut (){
return $this->Statut;
}
public function setStatut($Statut){
$this->Statut = $Statut;
return $this;
}
/**
* @return DateTime
*/
public function getDate (){
return $this->Date;
}
public function setDate ($Date){
$this->Date = $Date;
return $this;
}
}
感谢您的回复!
首先验证你有来自getDechetByMenageAndType
的结果,假设你在下面。
我看到的主要问题是您将Facture::$Dechets
指定为 OneToMany
这意味着Dechets
是对象的集合(多个(。
因此,您需要更改以下内容。
namespace BundlesMainBundleEntity;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineDBALTypesIntegerType;
use DoctrineORMMapping as ORM;
/**
* Facture
*
* @ORMTable(name="facture")
* @ORMEntity()
*/
class Facture
{
//...
/**
* @var ArrayCollection|BundlesMainBundleEntityDechet[]
* @ORMOneToMany(
* targetEntity="BundlesMainBundleEntityDechet",
* mappedBy="Facture",
* cascade={"all"}
* )
*/
private $Dechets;
//...
public function __construct()
{
$this->Dechets = new ArrayCollection();
}
/**
* @return ArrayCollection|BundlesMainBundleEntityDechet[]
*/
public function getDechets()
{
return $this->Dechets;
}
/**
* @param BundlesMainBundleEntityDechet $Dechets
*/
public function addDechet(BundlesMainBundleEntityDechet $Dechets)
{
if (!$this->Dechets->contains($Dechets)) {
$Dechets->setFacture($this); //explicitly set the facture
$this->Dechets[] = $Dechets;
}
return $this;
}
/**
* @param BundlesMainBundleEntityDechet $Dechets
*/
public function removeDechet(BundlesMainBundleEntityDechet $Dechets)
{
if ($this->Dechets->contains($Dechets)) {
$Dechets->setFacture(null); //optional if Facture is nullable
$this->Dechets->removeElement($Dechets);
}
return $this;
}
}
然后在控制器中将$Facture->setDechets($DechetsSelectionne);
更改为
$Facture->addDechet($DechetsSelectionne);
如果您要提交带有getDechetByMenageAndType
的集合,则需要应用Facture。
所以你可以做到
foreach($DechetsSelectionne as $Dechet) {
$Facture->addDechet($Dechet);
}
接下来,如果dechet
数据库表中的关联列未Facture_id
则需要使用 JOIN column
定义拥有侧列。假设列名Facture
您将使用:
namespace BundlesMainBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Dechet
*
* @ORMTable(name="dechet")
* @ORMEntity(repositoryClass="BundlesMainBundleEntityDechetRepository")
*/
class Dechet
{
//...
/**
* @ORMManyToOne(
* targetEntity="BundlesMainBundleEntityFacture",
* inversedBy="Dechets",
* )
* @ORMJoinColumn(name="Facture", referencedColumnName="id", nullable=true)
*/
private $Facture;
}
进行更改后,请务必清除缓存
php bin/console cache:clear --no-warmup
php bin/console cache:warmup
我想你忘了添加
$dechetSelectionne->addFacture($Facture)
同时添加您的实体:
/**
* @ORMManyToOne(
* targetEntity="BundlesMainBundleEntityFacture",
* inversedBy="Dechets", cascade={"persist"}
* )
*/
private $Facture;