1

これが私の問題です:

私は種の魔女が抽象的なクラスを持っており、種を拡張する別のクラス「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;
    }
}

ご協力ありがとうございました

4

1 に答える 1

0

抽象クラスの継承タイプを変更する必要がある場合があります。DoctrineのドキュメントでDoctrine 2と継承マッピングの詳細を読んでください

于 2013-03-21T13:41:26.817 に答える