2012-02-17 28 views
0

Symfony 2、Doctrine 2.1Doctrine 2、左の結合結果セットでプロパティを取得する方法は?

私は3つのエンティティを持っています。それらのうちの1つは中間(結合テーブル)です。 SomeObject、SomeProperty、ObjectPropertiesだとしましょう。

問題: SomeProperty 'name'プロパティの値を取得できません。

[...]  
class SomeObject 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

    /** 
    * 
    * @var ObjectProperties $objectProperties 
    * 
    * @ORM\OneToMany(targetEntity="ObjectProperties", mappedBy="object_id", cascade={"all"}) 
    */ 
    private $objectProperties; 
[...] 

[...] 
class SomeProperty 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
* @ORM\OneToMany(targetEntity="ObjectProperties", mappedBy="property_id", cascade={"all"}) 
*/ 
private $id; 


    /** 
    * @var string $name 
    * 
    */ 

private $name;//I NEED TO GET VALUE OF $name 
[...] 

[...] 
class ObjectProperties 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\ManyToOne(targetEntity="SomeObject", inversedBy="id", cascade={"all"}) 
* @ORM\JoinColumn(name="object_id", referencedColumnName="id") 
*/ 
private $object_id; 

/** 
* @ORM\Id 
* @ORM\ManyToOne(targetEntity="SomeProperty", inversedBy="id", cascade={"all"}) 
* @ORM\JoinColumn(name="property_id", referencedColumnName="id") 
*/ 
private $property_id; 
[...] 

セッターといつものようにゲッター:ここではコードです。


$entity = $em->getRepository('SomeTestBundle:SomeObject')->find($id); 
[...] 
$props = $entity->getObjectProperties(); 
    foreach ($props as $prop){ 
     echo '---------------------------<br>'; 
     var_dump($prop->getPropertyId()->getName()); 
    } 
は今、のgetName()は私にNULLという結果が得られますが、私はのgetIdに置き換える場合に予想されるとして、それは動作します:私のコントローラで

は、私はの線に沿って何かを持っています。私がフォームクラスでそれを使用しようとすると同じです。それはSomeProperty-> nameとObjectPropertiesの間に教義の関連がないからですか?

ドクトリンが働くことになっているとは思えません。 Some_Propertyは辞書テーブルの役割を果たすので、junctionテーブルにはproperty_idとobject_idだけが必要だと思っていました。そうでなければ、SomeProperty-> nameを変更することができました。

私はそれに真剣に取り組んでいます。それは欠けているか、私は一般的に大きな画像を取得していない設定オプションのいくつかの並べ替えですか?

+0

ObjectPropertiesでは、なぜプロパティ名の後に '_id'を追加しましたか? $ objectと$ propertyの名前を付ける必要があります。さらに、JoinColumnsアノテーションは役に立たない。 – greg0ire

+0

さて、@Columnアノテーションを使って動作させ、6時間で回答を投稿します。 – heliogabal

+0

Aaaaargh、私はあなたが複雑すぎると思う。あなたはこの '_id'サフィックス – greg0ire

答えて

0

は、タイプミスを検討 - 私はSomePropertyクラスに欠けて@Columnアノテーションを追加することによって、それが仕事作った:私は最初の場所でそれを逃した理由

/** 
    * @var string $name 
    * @ORM\Column(type="string") 
    */ 
    private $name; 

わからない...私は "推測します経験は、あなたがそれを必要とした後に得るものです。

関連する問題