学说:指拥有不存在的副场(再次)

时间:2016-07-12 20:36:34

标签: symfony doctrine-orm

不能把头包住。我或多或少地从教程中复制了,但是探查器抛出了两个错误:

  

AppBundle \ Entity \ Brand关联AppBundle \ Entity \ Brand#devices   指的是拥有边的字段AppBundle \ Entity \ Device#brands   不存在。

     

AppBundle \ Entity \ Device关联AppBundle \ Entity \ Device #brand   指的是反面的字段AppBundle \ Entity \ Brand#brands   不存在。

class Brand {

    /**
     * @var int
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

...

    /**
     * @ORM\OneToMany(targetEntity="Device", mappedBy="brands")
     */
    private $devices;
}

class Device {
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

...

    /**
     * @ORM\ManyToOne(targetEntity="Brand", inversedBy="devices")
     * @ORM\JoinColumn(name="brand_id", referencedColumnName="id", nullable=true)
     */
    private $brand;
}

2 个答案:

答案 0 :(得分:6)

没有测试过,但根据文档,它看起来应该是这样的

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional

class Brand {

    /**
     * @var int
     * @ORM\Column(name="brand_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

...

    /**
     * @ORM\OneToMany(targetEntity="Device", mappedBy="brand")
     */
    private $devices;
}

class Device {
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

...

    /**
     * @ORM\ManyToOne(targetEntity="Brand", inversedBy="devices")
     * @ORM\JoinColumn(name="brand_id", referencedColumnName="id", nullable=true)
     */
    private $brand;
}

答案 1 :(得分:0)

将关联定义为私有不起作用但是一旦我将它们更改为受保护,它就起作用了。虽然最重要的是要注意的是,类中定义的关联应该在inversedby和mappedby属性中使用,而不是类名或表名。这是一篇有用的帖子:What is the difference between inversedBy and mappedBy?