关于ManyToOne列的JoinColumn

时间:2015-03-25 12:37:07

标签: php doctrine symfony-2.6

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

说,我有这些实体:

/**
 * @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中的ManyToOne Dataset有关。如果是这样,我怎样才能建立这样的关系,不管这些情况如何?我无法使用生成的id值进行加入,因为Datasets将被删除并经常重新创建,以便ID每次都会更改。逻辑主键将保持不变。


编辑1

数据库如下所示:

  • 委托人
    • PK id
  • 类型
    • PK id
  • 数据集
    • PK id
    • 独特的钥匙
      • mandator_id,FK on Mandator
      • type_id,FK on Type
      • 线
      • detailtype
  • 配置
    • PK id
    • 在数据集的唯一键上应具有FK,因为这是逻辑主键

0 个答案:

没有答案