在我的symfony應用程序中,我使用嵌入式表單。在我的情況下,一個對象「CompetenceGroupe」可以有多個對象「CompetenceItem」,但一個對象「CompetenceItem」只屬於一個對象「CompetenceGroupe」,所以關係是manyToOne。嵌入表單關係原則
表格工作完美,我有兩個表(每個實體一個表),它很好地保存在數據庫中。
但是當我在控制器中選擇一個CompetenceGroupe對象時,我擁有該對象的所有信息,並且他有一個空的「competenceItems」屬性,所以我無法檢索childs對象(CompetenceItem)。
我的 「CompetenceGroupe」 實體:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="competences_groupes")
*/
class CompetenceGroupe
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id_competence_groupe;
/**
* @var User $user
*
* @ORM\ManyToOne(targetEntity="User", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="id_user", referencedColumnName="id_user", nullable=false)
*/
private $user;
/**
* @ORM\Column(type="string", length=60, nullable=true)
*/
protected $titre;
protected $competence_items;
public function __construct()
{
$this->competence_items = new ArrayCollection();
}
public function getCompetenceItems()
{
return $this->competence_items;
}
/**
* Get idCompetenceGroupe
*
* @return integer
*/
public function getIdCompetenceGroupe()
{
return $this->id_competence_groupe;
}
/**
* Set titre
*
* @param string $titre
*
* @return CompetenceGroupe
*/
public function setTitre($titre)
{
$this->titre = $titre;
return $this;
}
/**
* Get titre
*
* @return string
*/
public function getTitre()
{
return $this->titre;
}
/**
* Set user
*
* @param \AppBundle\Entity\User $user
*
* @return CompetenceGroupe
*/
public function setUser(\AppBundle\Entity\User $user)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return \AppBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
public function addItem(CompetenceItem $item)
{
$this->competence_items->add($item);
}
public function removeItem(CompetenceItem $item)
{
// ...
}
/**
* Set competenceItems
*
* @param \AppBundle\Entity\CompetenceItem $competenceItems
*
* @return CompetenceGroupe
*/
public function setCompetenceItems(\AppBundle\Entity\CompetenceItem $competenceItems = null)
{
$this->competence_items = $competenceItems;
return $this;
}
}
而我的 「CompetenceItem」 實體:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="competences_items")
*/
class CompetenceItem
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id_competence_item;
/**
* @ORM\Column(type="string", length=60, nullable=false)
*/
protected $libelle;
/**
* @var CompetenceNiveau $niveau
*
* @ORM\ManyToOne(targetEntity="CompetenceNiveau", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="id_competence_niveau", referencedColumnName="id_competence_niveau", nullable=true)
*/
private $niveau;
/**
* @var CompetenceGroupe $competence_groupe
*
* @ORM\ManyToOne(targetEntity="CompetenceGroupe", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="id_competence_groupe", referencedColumnName="id_competence_groupe", nullable=false)
*/
private $competence_groupe;
/**
* Get idCompetenceItem
*
* @return integer
*/
public function getIdCompetenceItem()
{
return $this->id_competence_item;
}
/**
* Set libelle
*
* @param string $libelle
*
* @return CompetenceItem
*/
public function setLibelle($libelle)
{
$this->libelle = $libelle;
return $this;
}
/**
* Get libelle
*
* @return string
*/
public function getLibelle()
{
return $this->libelle;
}
/**
* Set niveau
*
* @param \AppBundle\Entity\CompetenceNiveau $niveau
*
* @return CompetenceItem
*/
public function setNiveau(\AppBundle\Entity\CompetenceNiveau $niveau = null)
{
$this->niveau = $niveau;
return $this;
}
/**
* Get niveau
*
* @return \AppBundle\Entity\CompetenceNiveau
*/
public function getNiveau()
{
return $this->niveau;
}
/**
* Set competenceGroupe
*
* @param \AppBundle\Entity\CompetenceGroupe $competenceGroupe
*
* @return CompetenceItem
*/
public function setCompetenceGroupe(\AppBundle\Entity\CompetenceGroupe $competenceGroupe)
{
$this->competence_groupe = $competenceGroupe;
return $this;
}
/**
* Get competenceGroupe
*
* @return \AppBundle\Entity\CompetenceGroupe
*/
public function getCompetenceGroupe()
{
return $this->competence_groupe;
}
}
我覺得我有 「competence_items」 屬性在CompetenceGroupe實體缺少註釋,但我真的不確定...
感謝您的幫助!
你在定義他的關係時遇到了問題,首先他需要修復它 – ahmedbhs
同意,我已經更新了我的答案。與您的類似,但原始問題描述了來自CompetenceGroupe實體的OneToMany關係,而不是ManyToOne。這意味着他需要你描述的雙向關係。 – ehymel