Doctrine 2,如何在左连接结果集中获取属性?

时间:2012-02-17 08:59:36

标签: join symfony doctrine-orm junction-table

Symfony 2,Doctrine 2.1。

我有3个实体,其中一个是中间实体(连接表)。让我们说它是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-&gt; name和ObjectProperties之间没有学说关联?

我认为我不太了解学说应该如何发挥作用。我认为在联结表中只需要property_id和object_id,否则它对我来说没有多大意义,因为SomeProperty用作字典表,所以我可以在一个地方更改SomeProperty-&gt;名称。

我严重坚持下去。是不是缺乏某种配置选项,或者我通常没有得到更大的影响?

1 个答案:

答案 0 :(得分:0)

认为这是一个错字 - 我通过在SomeProperty类中添加缺少的@Column注释使其成功:

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

不知道为什么我一开始就错过了它...我想“经验就是你得到的东西,在你需要之后。”