Mysql 如何将一个FK添加到多个可以为null的FK中
我正在尝试两个实体a和B之间的manyTone的基本关系。实体a已经声明,因此实际迁移包含实体B的创建以及为了接受外键而对a的更改。我在这里也有一个问题:有一个bigint的PK,错误为不能添加外键 修正了这个问题,只有当我同时删除实体A并基本上从头开始创建它们时,它才起作用。 我的代码和迁移仅创建了B并更改了A,但仍然会导致错误: 不知何故,我希望A中的FK也接受可为null的值,我认为问题在于: 这是第一次迁移:Mysql 如何将一个FK添加到多个可以为null的FK中,mysql,Mysql,我正在尝试两个实体a和B之间的manyTone的基本关系。实体a已经声明,因此实际迁移包含实体B的创建以及为了接受外键而对a的更改。我在这里也有一个问题:有一个bigint的PK,错误为不能添加外键 修正了这个问题,只有当我同时删除实体A并基本上从头开始创建它们时,它才起作用。 我的代码和迁移仅创建了B并更改了A,但仍然会导致错误: 不知何故,我希望A中的FK也接受可为null的值,我认为问题在于: 这是第一次迁移: CREATE TABLE A(id BIGINT UNSIGNED AUTO
CREATE TABLE
A(id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
description VARCHAR(255) NOT NULL,
value VARCHAR(255) NOT NULL,
datatype VARCHAR(255) NOT NULL,
PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB
现在根据我的代码生成以下查询:
CREATE TABLE
B(id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
code INT UNSIGNED NOT NULL,
UNIQUE INDEX code_idx (code),
PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB
以及:
但是当我运行迁移时,A表中没有列。我真的很困惑,不知道该怎么解决这个问题。有人有线索吗
编辑:
我在实体中的代码是:
class A:
/**
* @var B
*
* @ORM\ManyToOne(targetEntity="App\Model\B", inversedBy="aS")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
private $bId;
class B:
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", nullable=false, options={"unsigned": true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="App\Model\A", mappedBy="bid")
*/
private $aS;
你的映射有点瑕疵或者你真的打算这样做 这是您的代码修复 这是首选的解决方案
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="a")
* @ORM\Entity(repositoryClass="App\Repository\ARepository")
*/
class A
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", options={"unsigned": true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="auto")
*/
private $id;
/**
* @var B
*
* @ORM\ManyToOne(targetEntity="B", inversedBy="aS")
* @ORM\JoinColumn(name="b_id", referencedColumnName="id")
*/
private $b;
}
在A实体中,实际上映射的是对象B而不是其ID您的ALTER表在逻辑上是错误的。您尝试将一个主键引用到另一个主键。1每个主键都是唯一的,因此您可以获得一对一,而不是一对多。2该表无法通过自动递增字段引用另一个表。请将字段添加到表a结构中并将其引用到表B,如ALTER table a Add COLUMN table_B_id BIGINT UNSIGNED NOT NULL、Add CONSTRAINT FK_D1DD32EBBF396750外键表_B_id引用B id。我添加了编辑。基本上,这是我的代码,生成的查询是由条令生成的。@Akina我已经按照你的建议做了,它正在工作,但我不确定如何在条令代码中转换此代码以生成查询。.关于条令,我只知道它存在。
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="a")
* @ORM\Entity(repositoryClass="App\Repository\ARepository")
*/
class A
{
/**
* @var B
*
* @ORM\ManyToOne(targetEntity="B", inversedBy="aS")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
* @ORM\Id
*/
private $bId;
}
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="a")
* @ORM\Entity(repositoryClass="App\Repository\ARepository")
*/
class A
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", options={"unsigned": true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="auto")
*/
private $id;
/**
* @var B
*
* @ORM\ManyToOne(targetEntity="B", inversedBy="aS")
* @ORM\JoinColumn(name="b_id", referencedColumnName="id")
*/
private $b;
}