0

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 か所で変更できます。

私はそれで真剣に立ち往生しています。欠けているのはある種の構成オプションですか、それとも全体像を把握していないのですか?

4

1 に答える 1

0

タイプミスだと考えてください - SomeProperty クラスに不足している @Column アノテーションを追加することで機能させました:

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

そもそもなぜ見逃したのかわからない…「経験は必要になってから手に入れるもの」だと思います。

于 2012-02-17T21:57:17.097 に答える