引用列必须是目标实体原则的主键列 - Symfony2

时间:2015-12-17 16:06:32

标签: mysql entity-framework symfony doctrine-orm

我在尝试验证数据库架构时遇到了一些问题,因为我收到了相互矛盾的错误消息:当我按照它说的那样做时,它告诉我这是错误的,反之亦然。

这是我的设置:

我有两个与此问题相关的表,一个名为order_option和order_product。它们之间没有直接映射,因为这是一个OpenCart安装,所以在那一端处理,但是当我尝试验证模式时,它失败并显示以下消息:

  

[Mapping] FAIL - 实体类'AppBundle \ Entity \ Oc49OrderOption'   映射无效:   *引用的列名'order_id'必须是目标实体类'AppBundle \ Entity \ Oc49OrderProduct'上的主键列。

order_option表的当前实体布局:

/**
 * Oc49OrderOption
 *
 * @ORM\Table(name="oc49_order_option")
 * @ORM\Entity
 */
class Oc49OrderOption
{

    /**
     * @var integer
     *
     * @ORM\Column(name="order_id", type="integer", nullable=false)
     */
    private $orderId;

    /**
     * @var integer
     *
     * @ORM\Column(name="order_product_id", type="integer", nullable=false)
     */
    private $orderProductId;

    /**
     * @var integer
     *
     * @ORM\Column(name="product_option_id", type="integer", nullable=false)
     */
    private $productOptionId;

etc ...

如果我改变它,它的内容如下:

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $orderId

当我再次运行验证检查时,我收到以下消息:

  

[Doctrine \ ORM \ Mapping \ MappingException]不允许使用单个ID   实体AppBundle \ Entity \ Oc49OrderOption

中的复合主键

所以几乎就像我试图纠正第一个错误一样,它告诉我这是不允许的 - 有点像捕获22!

有什么想法吗?这是架构的唯一问题,因为我到目前为止已设法解决所有其他冲突。

提前致谢。

1 个答案:

答案 0 :(得分:0)

试试这样:

/**
 * @ORM\Column(type="integer")
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="AUTO")
 *
 */
private $orderId;