gpt4 book ai didi

doctrine-orm - 如何使用Doctrine2处理组合关键实体上的关联?

转载 作者:行者123 更新时间:2023-12-04 04:51:37 27 4
gpt4 key购买 nike

假设我有一个要约,可以有1-n范围。
您立即想到,“将offer_id放到Range内”。

但是我的要约具有复合主键(由两个字段组成)。没有AUTOINCREMENT id列。

Doctrine2文档没有针对该特定情况讲太多,这是我的实体:

<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
*/
class Offer
{
/**
* @var Site $site
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Site")
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
*/
private $site;

/**
* @var string $pouet
* @ORM\Id
* @ORM\Column(name="pouet", type="string", length=255)
*/
private $pouet;
}

<?php
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Table(name="RangeItem")
* @ORM\Entity
*/
class Range
{
/**
* @todo This is test code only do not push me :-)
* @var ArrayCollection
* @ORM\ManyToOne(targetEntity="Offer")
*/
private $offers;
}

我收到此错误:

[Doctrine\ORM\ORMException]
Column name id referenced for relation from Pouet\MyBundle\Entity\Range towards Pouet\MyBundle\Entity\Offer does not exist.



那是有道理的,但是我该如何处理呢?具有复合主键的表是否被禁止具有关联?

最佳答案

我相信解决方案是将主键(PK)映射为外键(FK)。 IE。对于组成PK(位置,pouet)的每一列,您需要在相关实体上具有相同的列。

您可以通过对复合FK的每个部分使用JoinColumns批注(或YAML/XML中的等效项)和JoinColumn来实现此目的:

/**
* @ORM\Table(name="RangeItem")
* @ORM\Entity
*/
class Range
{
/**
* @todo This is test code only do not push me :-)
* @var ArrayCollection
* @ORM\ManyToOne(targetEntity="Offer")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="site_id", referencedColumnName="site_id"),
* @ORM\JoinColumn(name="pouet", referencedColumnName="pouet")
* )
*/
private $offers;
}

我希望这可以帮助仍然在这个问题上苦苦挣扎的人。

关于doctrine-orm - 如何使用Doctrine2处理组合关键实体上的关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com