原则创建外键

3b6akqbq  于 2022-10-22  发布在  Mysql
关注(0)|答案(2)|浏览(121)

我对理论中的外键有困难。我有一个“用户”表和一个“订单”表。现在,我希望从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查询中。我做错了什么?

7kqas0il

7kqas0il1#

解决方案很简单。它只能是关系或数据类型(字符串、对象、int)。因此,我的示例需要一个关系,所以我必须删除@ORM\Column-注解,它成功了!

von4xj4u

von4xj4u2#

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

console doctrine:schema:update

相关问题