教义 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,如何在左连接结果集中获取属性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 symfony 在教义查询构建器中选择表之间的特定连接?