Doctrine/Symfony - 继承 - 关系
Doctrine/Symfony - Inheritance - Relations
我有两个实体:Individu(个人)和 Epoux_se(丈夫)
丈夫继承个人
class Individu
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=30)
*/
private $nom;
/**
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Individu", cascade={"persist"})
* @ORM\JoinColumn(name="pere_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $pere;
public function __construct($nom, $prenoms, $sexe)
{
$this->nom = $nom;
$this->prenoms= $prenoms;
$this->sexe = $sexe;
$this->actes = new \Doctrine\Common\Collections\ArrayCollection();
}
还有class老公
class Epoux_se extends Individu
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
public function __construct($nom, $prenoms, $sexe, $lieuOrigine, $dateNaissance, $age)
{
parent::__construct($nom, $prenoms, $sexe);
$this->lieuOrigine = $lieuOrigine;
$this->dateNaissance = $dateNaissance;
$this->age = $age;
}
当我导入 DataFixtures 时
new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo",
"05/08/1722", 22);
我对 Husband 的构造函数有错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pere_id' in
'field list'
An exception occurred while executing 'INSERT INTO epoux_se (nom, prenoms, sexe, profession, pere_id, mere_id, lieu
Origine, dateNaissance, age) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["Aurel", "a:2:{i:0;s:15:\"Jean-Christ
ophe\";i:1;s:4:\"Marc\";}", "M", null, null, null, "Saint-Malo", "05/08/1722", 22]:
赛程:
$marie = new Individu("Duhamel", ["Ophelia", "Carmène"], "F");
$manager->persist($marie);
$epoux_se = new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo", "05/08/1722", 22);
$manager->persist($epoux_se);
$manager->flush();
怎么办?谢谢!
将父 class 属性的可见性更改为受保护。然后更新你的数据库方案。
我找到了解决办法! Individual Entity
上面需要添加如下注解
- @ORM\InheritanceType("JOINED")
/**
* Individu
*
* @ORM\InheritanceType("JOINED")
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\IndividuRepository")
*/
class Individu
我有两个实体:Individu(个人)和 Epoux_se(丈夫) 丈夫继承个人
class Individu
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=30)
*/
private $nom;
/**
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Individu", cascade={"persist"})
* @ORM\JoinColumn(name="pere_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $pere;
public function __construct($nom, $prenoms, $sexe)
{
$this->nom = $nom;
$this->prenoms= $prenoms;
$this->sexe = $sexe;
$this->actes = new \Doctrine\Common\Collections\ArrayCollection();
}
还有class老公
class Epoux_se extends Individu
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
public function __construct($nom, $prenoms, $sexe, $lieuOrigine, $dateNaissance, $age)
{
parent::__construct($nom, $prenoms, $sexe);
$this->lieuOrigine = $lieuOrigine;
$this->dateNaissance = $dateNaissance;
$this->age = $age;
}
当我导入 DataFixtures 时
new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo", "05/08/1722", 22);
我对 Husband 的构造函数有错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pere_id' in 'field list'
An exception occurred while executing 'INSERT INTO epoux_se (nom, prenoms, sexe, profession, pere_id, mere_id, lieu Origine, dateNaissance, age) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["Aurel", "a:2:{i:0;s:15:\"Jean-Christ ophe\";i:1;s:4:\"Marc\";}", "M", null, null, null, "Saint-Malo", "05/08/1722", 22]:
赛程:
$marie = new Individu("Duhamel", ["Ophelia", "Carmène"], "F");
$manager->persist($marie);
$epoux_se = new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo", "05/08/1722", 22);
$manager->persist($epoux_se);
$manager->flush();
怎么办?谢谢!
将父 class 属性的可见性更改为受保护。然后更新你的数据库方案。
我找到了解决办法! Individual Entity
上面需要添加如下注解
- @ORM\InheritanceType("JOINED")
/**
* Individu
*
* @ORM\InheritanceType("JOINED")
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\IndividuRepository")
*/
class Individu