我在学说中遇到外键问题。我有一个“用户”表和“订单”表。现在我想从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查询中。我做错了什么?
答案 0 :(得分:4)
解决方案很简单。它只能是关系或数据类型(字符串,对象,int)。所以我的例子需要一个关系,所以我不得不删除@ORM\Column
- annoation并且它有效!
答案 1 :(得分:0)
如果您的数据库表引擎类型不支持外键(例如MyISAM),通常会发生这种情况。尝试将引擎类型更改为InnoDB,然后运行
console doctrine:schema:update