1

我想通过第二个实体的逻辑主键将一个实体加入另一个实体。

说,我有这些实体:

/**
 * @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.

这是否与JoinColumnsManyToOneDataset. 如果是这样,无论这些情况如何,我如何建立这样的关系?我不能使用生成的id值来加入,因为Datasets会经常被删除和重新创建,这样 ID 每次都会改变。逻辑主键将保持不变。


编辑 1

数据库如下所示:

  • 委托人
    • PK 编号
  • 类型
    • PK 编号
  • 数据集
    • PK 编号
    • 唯一键
      • mandator_id,FK on Mandator
      • type_id, FK on Type
      • 线
      • 详细类型
  • 配置
    • PK 编号
    • 应在数据集的唯一键上有一个 FK,因为这是逻辑主键
4

0 回答 0