0

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。

我严重坚持下去。是缺少某种配置选项还是我通常没有得到更大的图景?

4

1 回答 1

0

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

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

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

于 2012-02-17T21:57:17.097 回答