Symfony 2、Doctrine 2.1。
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 の間に教義の関連付けがないためですか?
教義が機能するはずの方法がよくわからないと思います。ジャンクション テーブルには property_id と object_id だけが必要だと思いました。それ以外の場合はあまり意味がありません。SomeProperty はディクショナリ テーブルとして機能するため、SomeProperty->name を 1 か所で変更できます。
私はそれで真剣に立ち往生しています。欠けているのはある種の構成オプションですか、それとも全体像を把握していないのですか?