我对理论中的外键有困难。我有一个“用户”表和一个“订单”表。现在,我希望从orders表中的userID到user表中的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条答案
按热度按时间7kqas0il1#
解决方案很简单。它只能是关系或数据类型(字符串、对象、int)。因此,我的示例需要一个关系,所以我必须删除
@ORM\Column
-注解,它成功了!von4xj4u2#
如果数据库表引擎类型不支持外键(例如MyISAM),通常会发生这种情况。尝试将引擎类型更改为InnoDB,然后运行