我想通过第二个实体的逻辑主键将一个实体加入另一个实体。
说,我有这些实体:
/**
* @ORM\Table()
* @ORM\Entity()
*/
class Configuration
{
/**
* @var Dataset
*
* @ORM\ManyToOne(targetEntity="Dataset", fetch="EAGER")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="line", referencedColumnName="line"),
* @ORM\JoinColumn(name="detailtype", referencedColumnName="detailtype"),
* @ORM\JoinColumn(name="type_id", referencedColumnName="type_id"),
* @ORM\JoinColumn(name="mandator_id", referencedColumnName="mandator_id")
* )
*/
private $dataset;
/**
* @var string
*
* @ORM\Column(name="line", type="string", length=2)
*/
private $line;
/**
* @var string
*
* @ORM\Column(name="detailtype", type="string", length=50)
*/
private $detailtype;
/**
* @var integer
*
* @ORM\Column(name="type_id", type="integer")
*/
private $typeId;
/**
* @var integer
*
* @ORM\Column(name="mandator_id", type="integer")
*/
private $mandatorId;
}
/**
* Dataset
*
* @ORM\Table(
* uniqueConstraints = {
* @ORM\UniqueConstraint(
* name="uq_dataset",
* columns={"type_id", "mandator_id", "line", "detailtype"}
* )
* }
* )
* @ORM\Entity()
*/
class Dataset
{
/**
* @var Type
*
* @ORM\ManyToOne(targetEntity="Type")
* @ORM\JoinColumn(name="type_id")
*/
private $type;
/**
* @var Mandator
*
* @ORM\ManyToOne(targetEntity="Mandator")
* @ORM\JoinColumn(name="mandator_id", onDelete="CASCADE")
*/
private $mandator;
/**
* @var string
*
* @ORM\Column(name="line", type="string", length=2)
*/
private $line;
/**
* @var string
*
* @ORM\Column(name="detailtype", type="string", length=50)
*/
private $detailtype;
}
当我执行php app/console doctrine:schema:update --dump-sql
时,我收到错误
[Doctrine\ORM\ORMException]
Column name `type_id` referenced for relation from Configuration towards Dataset does not exist.
这是否与JoinColumn
sManyToOne
在Dataset
. 如果是这样,无论这些情况如何,我如何建立这样的关系?我不能使用生成的id
值来加入,因为Datasets
会经常被删除和重新创建,这样 ID 每次都会改变。逻辑主键将保持不变。
编辑 1
数据库如下所示:
- 委托人
- PK 编号
- 类型
- PK 编号
- 数据集
- PK 编号
- 唯一键
- mandator_id,FK on Mandator
- type_id, FK on Type
- 线
- 详细类型
- 配置
- PK 编号
- 应在数据集的唯一键上有一个 FK,因为这是逻辑主键