これが私の問題です:
私は種の魔女が抽象的なクラスを持っており、種を拡張する別のクラス「Raie」を持っています。すべての種には型があるため、種と typeSpecies の間に ManyToOne の関係があります。
doctrine を使用してデータベースを生成すると、テーブル種 (抽象的であるため奇妙) とテーブル Raie が生成されます。
種テーブルの生成を避けるために@ORM\Table()
、エンティティ定義から を削除する必要がありますか? それは十分ですか?
主な問題は、テーブルRaie にはtypeSpeciesエンティティとの関係を除いて、種で定義されたすべての属性があることです!
理解を助けるために、私の 2 つのクラスの定義を次に示します。
<?php
namespace Ailerons\BackendBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Species
*
* @ORM\Table()
* @ORM\Entity
*/
abstract class Species
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Type
*
* @ORM\ManyToOne(targetEntity="TypeSpecies", inversedBy="species")
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="remarque", type="text")
*/
private $remarque;
/**
* @var boolean
*
* @ORM\Column(name="sexe", type="boolean")
*/
private $sexe;
/**
* @var float
*
* @ORM\Column(name="length", type="float")
*/
private $length;
/**
* @var Observation
*
* @ORM\ManyToMany(targetEntity="Observation", inversedBy="species")
*/
private $observations;
/**
* Constructor
*/
public function __construct()
{
$this->observations = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set remarque
*
* @param string $remarque
* @return Species
*/
public function setRemarque($remarque)
{
$this->remarque = $remarque;
return $this;
}
/**
* Get remarque
*
* @return string
*/
public function getRemarque()
{
return $this->remarque;
}
/**
* Set sexe
*
* @param boolean $sexe
* @return Species
*/
public function setSexe($sexe)
{
$this->sexe = $sexe;
return $this;
}
/**
* Get sexe
*
* @return boolean
*/
public function getSexe()
{
return $this->sexe;
}
/**
* Set length
*
* @param float $length
* @return Species
*/
public function setLength($length)
{
$this->length = $length;
return $this;
}
/**
* Get length
*
* @return float
*/
public function getLength()
{
return $this->length;
}
/**
* Add observations
*
* @param \Ailerons\BackendBundle\Entity\Observation $observations
* @return Species
*/
public function addObservation(\Ailerons\BackendBundle\Entity\Observation $observations)
{
$this->observations[] = $observations;
return $this;
}
/**
* Remove observations
*
* @param \Ailerons\BackendBundle\Entity\Observation $observations
*/
public function removeObservation(\Ailerons\BackendBundle\Entity\Observation $observations)
{
$this->observations->removeElement($observations);
}
/**
* Get observations
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getObservations()
{
return $this->observations;
}
/**
* Set type
*
* @param \Ailerons\BackendBundle\Entity\TypeSpecies $type
* @return Species
*/
public function setType(\Ailerons\BackendBundle\Entity\TypeSpecies $type = null)
{
$this->type = $type;
return $this;
}
/**
* Get type
*
* @return \Ailerons\BackendBundle\Entity\TypeSpecies
*/
public function getType()
{
return $this->type;
}
}
ライエ級
<?php
namespace Ailerons\BackendBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Raie
*
* @ORM\Table()
* @ORM\Entity
*/
class Raie extends Species
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var float
*
* @ORM\Column(name="wingspan", type="float")
*/
private $wingspan;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set wingspan
*
* @param float $wingspan
* @return Raie
*/
public function setWingspan($wingspan)
{
$this->wingspan = $wingspan;
return $this;
}
/**
* Get wingspan
*
* @return float
*/
public function getWingspan()
{
return $this->wingspan;
}
}
ご協力ありがとうございました