教义 2,如何在左连接结果集中获取属性? [关闭]

Posted

技术标签:

【中文标题】教义 2,如何在左连接结果集中获取属性? [关闭]【英文标题】:Doctrine 2, how to get a property in a left join result set? [closed] 【发布时间】:2012-02-17 08:59:36 【问题描述】:

Symfony 2,学说 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() 给了我空结果,但如果我用 getId 替换它,它会按预期工作。如果我尝试在表单类中使用它也是一样的。是不是因为 SomeProperty->name 和 ObjectProperties 之间没有学说关联?

我想我不太明白教义应该如何运作。我认为在联结表中只需要 property_id 和 object_id ,否则对我来说没有多大意义,因为 SomeProperty 用作字典表,所以我可以在一个地方更改 SomeProperty->name。

我非常坚持。是缺少某种配置选项,还是我通常无法了解全局?

【问题讨论】:

在 ObjectProperties 中,为什么要在属性名称后添加“_id”?您应该将它们命名为 $object 和 $property。另外,JoinColumns 注释是没用的。 好吧,通过使用@Column 注释使其工作,将在 6 小时内发布答案。 Aaaaargh,我认为你过于复杂了。您只需删除此“_id”后缀 没错,但它可能无论如何都行不通,看我的回答。 【参考方案1】:

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

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

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

【讨论】:

以上是关于教义 2,如何在左连接结果集中获取属性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

连接 MySQL 表:在左表的一行中显示右表的所有结果

如何在教义中进行子查询并将结果水合到对象中?

如何使用 symfony 在教义查询构建器中选择表之间的特定连接?

如何在 symfony 2 和教义 2 中自定义 sql 日志?

如何将在左连接中具有连接的 sql 转换为查询构建器?

教义 2 - 从 $em->find() 获取 SQL