2017-09-11 14 views
0

私はsymphony 3アプリケーションのドクトリンリレーションを実装しようとしています。親クラスと子クラスのドクトリンリレーション

私は2つの異なるクラスを持っています。一つは、もう一つは、同じエンティティに関連していて、多対一の関係です。

ここに私のクラスがあります。

Country.php

class Country 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @Groups({"exposed"}) 
    */ 
    private $id; 

    /** 
     * @ORM\OneToMany(targetEntity="Link", mappedBy="country") 
     */ 
     private $link; 

    /** 
     * @ORM\OneToMany(targetEntity="LinkChild", mappedBy="country") 
     */ 
     private $linkChild; 

     public function __construct() 
     { 
      $this->link = new ArrayCollection(); 
      $this->linkChild = new ArrayCollection(); 
     } 
    } 

Link.php

/** 
* Link 
* 
* @ORM\Table(name="link") 
* @ORM\Entity(repositoryClass="Decathlon\AppCollaboratorBundle\Reposito\LinkRepository") 
* @Vich\Uploadable 
* @ORM\HasLifecycleCallbacks() 
*/ 
class Link 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @Serializer\Groups({"link_list", "link_info"}) 
    * @Serializer\Expose() 
    */ 
    protected $id; 

    /** 
    * @var Country 
    * 
    * @ORM\ManyToOne(targetEntity="Country", inversedBy="link", cascade={"persist"}) 
    * @JoinColumn(name="country_id", referencedColumnName="id") 
    */ 
    protected $country; 
} 

LinkChild.php

/** 
* @ORM\Entity(repositoryClass="Decathlon\AppCollaboratorBundle\Repository\LinkChildRepository") 
*/ 
class LinkChild extends Link 
{ 

    /** 
    * @var Country 
    * 
    * @ORM\ManyToOne(targetEntity="Country", inversedBy="linkChild", cascade={"persist"}) 
    * @JoinColumn(name="country_id", referencedColumnName="id") 
    */ 
    protected $country; 
} 

私は、国へのリンクとLinkChild両方との関係が、ノーカントリーを作成する必要があります列がLinkChildテーブルに作成されます。

私は再帰的なクラスを使わないように言いましたので、LinkとLinkChildを作成する必要があります。

私が試していることを磨く方法がありますか?

ありがとうございます。

答えて

1

私はあなたが探しているものは、単一のテーブルの継承だと思いますか?

<?php 
namespace MyProject\Model; 

/** 
* @Entity 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"}) 
*/ 
class Person 
{ 
    // ... 
} 

/** 
* @Entity 
*/ 
class Employee extends Person 
{ 
    // ... 
} 

こちらをご覧ください:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance

0

をそれ、具体的LinkChildに属している変数にするprivate $childCountry;ような何かにあなたのprotected $country;変数の名前を変更してください。

あなたのprotected $country;のLinkChildでの上書きは、リンクのものとまったく同じなので無視されます。

関連する問題