2016-08-18 4 views
0

に子クラスのusineの教義に継承されたフィールドの列を作成します。私はいくつかのフィールドを持つ親クラス<em>ライセンス</em>持ってsymfonyの3を使用して2 ORM

<?php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

class Licence 
{ 
/** 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\Column(type="integer") 
*/ 
protected $id; 

/** 
* @ORM\Column(
* type="string", 
*  unique=true, 
*  length=30, 
*  nullable=false 
* ) 
*/ 
protected $licenceKey; 
} 

をそして、私はその子クラスを持っていますこれを拡張します。確かに、それは同じフィールドを持っているが、私は特定の場所にデータベースに格納することがそれらを必要とする: だから私は次のように書いた:

namespace AppBundle\Entity\LicenceCase\FirstLicenceCase; 

use AppBundle\Entity\Licence as BaseLicence; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="lic_first") 
* @ORM\InheritanceType("SINGLE_TABLE") 
*/ 
class FirstLicenceCase extends BaseLicence 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */ 
    private $id; 

    public function getLicenceKey() 
    { 
     return $this->licenceKey; 
    } 
    public function setLicenceKey($licenceKey) 
    { 
     $this->licenceKey = $licenceKey; 
    } 
} 

私は特定のLicenceCaseの一意の列を取得する必要があります。私は、さまざまなフィールドとメソッドを持つすべてのLicenceCaseに対して新しいクラスを作成します。しかし、このコードでは、私のデータベースに適切な列が得られません。どうすればこの問題を解決できますか?

+0

子クラスの親クラスのクラス注釈を指定しました。私はテーブルと継承タイプを意味します。この例に従ってください:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance –

答えて

0

解決策は、すべての子を指定する必要がある継承ツリーを指定することです。例えば、親クラスにおいて、以下の注釈を書き込む。

/** 
* @Entity 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="discr", type="integer") 
* @DiscriminatorMap({"1" = "LicenceCase1", "2" = "LicenceCase2", "3" = "LicenceCase3"}) 
*/ 
abstract class Licence 
{ 
    // ... 
} 

これは私に役立ちます。

関連する問題