Skip to content

Instantly share code, notes, and snippets.

Created March 14, 2013 15:20
Show Gist options
  • Save anonymous/5162227 to your computer and use it in GitHub Desktop.
Save anonymous/5162227 to your computer and use it in GitHub Desktop.
Voilà l’erreur exacte: Entity of type Eud\TrouveToutBundle\Entity\ConceptConcept has identity through a foreign entity Eud\TrouveToutBundle\Entity\Concept, however this entity has no identity itself. You have to call EntityManager#persist() on the related entity and make sure that an identifier was generated before trying to persist 'Eud\TrouveT…
<?php
namespace Eud\TrouveToutBundle\Entity;
// tout les uses
/**
* Eud\TrouveToutBundle\Entity\Concept
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Eud\TrouveToutBundle\Entity\ConceptRepository")
* @UniqueEntity("name")
*/
class Concept
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Eud\TrouveToutBundle\Entity\ConceptConcept", mappedBy="moreSpecific", orphanRemoval=true)
*/
private $moreGeneralConcepts;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Eud\TrouveToutBundle\Entity\ConceptConcept", mappedBy="moreGeneral", orphanRemoval=true)
*/
private $moreSpecificConcepts;
public function __construct()
{
$this->moreGeneralConcepts = new ArrayCollection();
$this->moreSpecificConcepts = new ArrayCollection();
}
/**
* Add moreGeneralConcepts
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreGeneralConcepts
* @return Concept
*
*/
public function addMoreGeneralConcept(Concept $moreGeneralConcept)
{
$conceptConcept = new ConceptConcept();
$conceptConcept->linkConcepts($this, $moreGeneralConcept);
$this->moreGeneralConcepts[] = $conceptConcept;
return $this;
}
/**
* Remove moreGeneralConcept
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreGeneralConcepts
*
*/
public function removeMoreGeneralConcept(Concept $moreGeneralConcept)
{
$self = $this;
$conceptConcept = $this->moreGeneralConcepts->filter(
function($conceptConcept) use ($self, $moreGeneralConcept)
{
return ($conceptConcept->getMoreSpecific()->getId() == $self->getId()) and ($conceptConcept->getMoreGeneral()->getId() == $moreGeneralConcept->getId());
})->first();
$conceptConcept->getMoreGeneral()->removeMoreGeneralConceptConcept($conceptConcept);
$this->moreGeneralConcepts->removeElement($conceptConcept);
}
public function removeMoreGeneralConceptConcept(ConceptConcept $moreGeneralConceptConcept)
{
$this->moreGeneralConcepts->removeElement($moreGeneralConceptConcept);
}
public function removeMoreSpecificConceptConcept(ConceptConcept $moreSpecificConceptConcept)
{
$this->moreSpecificConcepts->removeElement($moreSpecificConceptConcept);
}
/**
* Get moreGeneralConcepts
*
* @return \Doctrine\Common\Collections\Collection
*
*/
public function getMoreGeneralConcepts()
{
return $this->moreGeneralConcepts->map(function (ConceptConcept $x) {return $x->getMoreGeneral();});
}
/**
* Get moreGeneralConceptConcepts
*
* @return \Doctrine\Common\Collections\Collection
*
*/
public function getMoreGeneralConceptConcepts()
{
return $this->moreGeneralConcepts;
}
/**
* Add moreSpecificConcepts
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreSpecificConcepts
* @return Concept
*
*/
public function addMoreSpecificConcept(Concept $moreSpecificConcepts)
{
$conceptConcept = new ConceptConcept();
$conceptConcept->linkConcepts($moreSpecificConcepts, $this);
$this->moreSpecificConcepts[] = $conceptConcept;
return $this;
}
/**
* Remove moreSpecificConcepts
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreSpecificConcepts
*
*/
public function removeMoreSpecificConcept(Concept $moreSpecificConcept)
{
$self = $this;
$conceptConcept = $this->moreSpecificConcepts->filter(
function($conceptConcept) use ($moreSpecificConcept, $self)
{
return $conceptConcept->getMoreSpecific() == $moreSpecificConcept and $conceptConcept->getMoreGeneral() == $self;
})->first();
$conceptConcept->getMoreSpecific()->removeMoreSpecificConceptConcept($conceptConcept);
$this->moreSpecificConcepts->removeElement($conceptConcept);
}
/**
* Get moreSpecificConcepts
*
* @return \Doctrine\Common\Collections\Collection
*
*/
public function getMoreSpecificConcepts()
{
return $this->moreSpecificConcepts->map(function (ConceptConcept $x){return $x->getMoreSpecific();});
}
}
<?php
namespace Eud\TrouveToutBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eud\TrouveToutBundle\Entity\Concept;
/**
* ConceptConcept
*
* @ORM\Table()
* @ORM\Entity
*/
class ConceptConcept
{
/**
* @var Eud\TrouveToutBundle\Entity\Concept
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Eud\TrouveToutBundle\Entity\Concept", inversedBy="moreSpecificConcepts")
*/
private $moreGeneral;
/**
* @var Eud\TrouveToutBundle\Entity\Concept
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Eud\TrouveToutBundle\Entity\Concept", inversedBy="moreGeneralConcepts")
*/
private $moreSpecific;
public function linkConcepts(Concept $moreSpecific, Concept $moreGeneral)
{
$this->setMoreGeneral($moreGeneral);
$this->setMoreSpecific($moreSpecific);
}
/**
* Set moreGeneral
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreGeneral
* @return ConceptConcept
*
* @codeCoverageIgnore
*/
public function setMoreGeneral(Concept $moreGeneral)
{
$this->moreGeneral = $moreGeneral;
return $this;
}
/**
* Get moreGeneral
*
* @return \Eud\TrouveToutBundle\Entity\Concept
*
* @codeCoverageIgnore
*/
public function getMoreGeneral()
{
return $this->moreGeneral;
}
/**
* Set moreSpecific
*
* @param \Eud\TrouveToutBundle\Entity\Concept $moreSpecific
* @return ConceptConcept
*
* @codeCoverageIgnore
*/
public function setMoreSpecific(Concept $moreSpecific)
{
$this->moreSpecific = $moreSpecific;
return $this;
}
/**
* Get moreSpecific
*
* @return \Eud\TrouveToutBundle\Entity\Concept
*
* @codeCoverageIgnore
*/
public function getMoreSpecific()
{
return $this->moreSpecific;
}
}
@dionisos2
Copy link

Voilà l’erreur exacte:
Entity of type Eud\TrouveToutBundle\Entity\ConceptConcept has identity through a foreign entity Eud\TrouveToutBundle\Entity\Concept, however this entity has no identity itself. You have to call EntityManager#persist() on the related entity and make sure that an identifier was generated before trying to persist 'Eud\TrouveToutBundle\Entity\ConceptConcept'. In case of Post Insert ID Generation (such as MySQL Auto-Increment or PostgreSQL SERIAL) this means you have to call EntityManager#flush() between both persist operations.

À noter que tout se passe bien quand je modifie un concept déjà crée, c’est quand je crée un concept, en même temps que je lui ajoute un concept, que ça me fait ça:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment