2017-01-12 25 views
1

私はClassAを、ManyToOne関係(これまではシンプル)のエンティティClassBにマップしました。Doctrine 2外部キーとしての複合プライマリキー

class ClassA{ 
    /** 
    * @var string 
    * @ORM\Id 
    * @ORM\Column(name="keyA", type="string", length=255) 
    */ 
    private $keyA; 


    /** 
    * @var ClassB $classB 
    * @ORM\ManyToOne(targetEntity="ClassB", inversedBy="classAs") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="ClassB_keyB", referencedColumnName="keyB") 
    * }) 
    */ 
    private $classB; 
} 

そして、これがClassBです:

class ClassB{ 
    /** 
    * @var string 
    * @ORM\Id 
    * @ORM\Column(name="keyB", type="string", length=255) 
    */ 
private $keyB; 

    /** 
    * 
    * @var ClassC $classC 
    * @ORM\Id 
    * @ORM\ManyToOne(targetEntity="ClassC", inversedBy="classBs") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="ClassC_keyC", referencedColumnName="keyC") 
    * }) 
    */ 
    private $classC; 

    /** 
    * @var ArrayCollection $classAs 
    * @ORM\OneToMany(targetEntity="ClassA", mappedBy="classB") 
    */ 
    private $classAs; 
} 

あなたがClassBを気づくことができるように複合主キー(2つのエンティティとカラム上)が含まれています。
そして、これはClassCです:

class ClassC{ 
    /** 
    * @var string 
    * @ORM\Id 
    * @ORM\Column(name="keyC", type="string", length=255) 
    */ 
    private $keyC; 


    /** 
    * @var ArrayCollection $classBs 
    * @ORM\OneToMany(targetEntity="ClassB", mappedBy="classC") 
    */ 
    private $classBs; 
} 

私は(findAll()を使用)にClassAのすべてのエンティティを表示しようWhene私はこの例外にMissing value for primary key classC on ERP\................\ClassB

を得る私はここで何をしないのですか?!

答えて

1

あなたは(){ 戻ります$ this-> createQueryBuilder( 'ディ・') getClassAをClassARepositoryで、独自のメソッドを作成し、結合列

+1

パブリック関数を追加する必要があります - > leftJoin( 'di.classB'、 'ec') - > addSelect( 'ec') - > getQuery() - > getResult(); } – isom

+0

は素晴らしい仕事をしています – Ld91

関連する問題