主义创造外键

时间:2014-06-13 15:40:46

标签: mysql symfony doctrine foreign-keys

我在学说中遇到外键问题。我有一个“用户”表和“订单”表。现在我想从orders-table中的userID到user-table中的id有一个外键。订单实体看起来像:

<?php

namespace Application\TestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(
 *  name="Orders",
 *  options={"collate"="utf8_general_ci",
 *   "charset"="utf8",
 *   "engine"="InnoDB"
 *  }
 * )
 * @ORM\Entity(repositoryClass="Application\TestBundle\Entity\OrdersRepository")
 */
class Orders
{
    /**
     * @var integer
     *
     * @ORM\Column(
     *  name="id",
     *  unique=true,
     *  type="integer",
     *  options={"unsigned"=true}
     * )
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(
     *  name="userID",
     *  type="integer",
     *  nullable=false,
     *  options={"unsigned"=true}
     * )
     * @ORM\OneToOne(targetEntity="User")
     * @ORM\JoinColumn(name="userID", referencedColumnName="id")
     */
    private $userID;

    // ...
}

用户实体如下:

<?php

namespace Application\TestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(
 *  name="User",
 *  options={"collate"="utf8_general_ci",
 *   "charset"="utf8",
 *   "engine"="InnoDB"
 *  }
 * )
 * @ORM\Entity(repositoryClass="Application\TestBundle\Entity\UserRepository")
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(
     *  name="id",
     *  unique=true,
     *  type="integer",
     *  options={"unsigned"=true}
     * )
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    // ...
}

不幸的是没有设置外键。它不在SQL查询中。我做错了什么?

2 个答案:

答案 0 :(得分:4)

解决方案很简单。它只能是关系或数据类型(字符串,对象,int)。所以我的例子需要一个关系,所以我不得不删除@ORM\Column - annoation并且它有效!

答案 1 :(得分:0)

如果您的数据库表引擎类型不支持外键(例如MyISAM),通常会发生这种情况。尝试将引擎类型更改为InnoDB,然后运行

console doctrine:schema:update