【问题标题】:Doctrine ManyToOne with information missing in this object此对象中缺少信息的多对一原则
【发布时间】:2014-08-30 22:30:20
【问题描述】:

我尝试使用一个非常旧的数据库启动并运行一个 zf2 学说 2 项目(并且不能进行太多更改,因为它服务于一个旧的 php 项目)。

我有一个表格“网络”:

  • 网络ID
  • pID
  • 姓名
  • ...

一个表“p_news_category”,其中包含:

  • id
  • pID
  • 网络ID
  • 姓名
  • ...

一个“新闻”表,其中包含:

  • 新闻ID
  • 网络ID
  • 类别
  • 标题
  • ...

(粗体 == 主要)

如您所见,新闻没有“pID”(项目 ID)的信息,但类别表需要它,因为它是主键。

我现在尝试了(在我的新闻实体中)

/**
 * @var \Mobil\Entity\Web
 *
 * @ORM\ManyToOne(targetEntity="Mobil\Entity\Web")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="webID", referencedColumnName="webID")
 * })
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="NONE")
 */
private $webid;

/**
 * @var \Mobil\Entity\PNewsCategory
 *
 * @ORM\ManyToOne(targetEntity="Mobil\Entity\PNewsCategory")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="category", referencedColumnName="id"),
 *   @ORM\JoinColumn(name="webID", referencedColumnName="webID")
 * })
 */
private $category;

但是:Mobil\Entity\PNewsCategory 上的主键 pid 缺少值

如何为 pID 编写 @ORM\JoinColumn?

【问题讨论】:

    标签: php sql doctrine-orm zend-framework2


    【解决方案1】:

    您的新闻实体中已经有类别,因此您需要在 news 和 news_category 之间定义双向关系,news 作为拥有方,news_category 作为反方。

    更新:

    如果类别中的主键是id,那么它应该可以工作。我从你的问题中了解到pId 是指向Project 的键,所以在Category 实体中它是外键,而不是主键。

    如果您想让问题更清楚,请显示您的所有实体及其关键定义。

    【讨论】:

    • 这正是我的代码应该做的不是吗?但是,它不起作用,因为缺少像 @ORM\JoinColumn(name="webID.pID", referencedColumnName="pID") 这样的东西。
    • 正如我在问题中所写:(粗体 == 主要)PNewsCategory 中的主要是 id、pID 和 webID - 我无法更改。我唯一的问题是,我的新闻(直接)不知道她的项目,它需要他的“webid”关系才能知道 pID。
    • @Kipperlenny 好的,我听到了。但是p_news_category 中的id 至少是唯一的吗?
    • 不,只有“id、pID、webID”一起是唯一的 - 这些数据库已有 13 年历史,无法更改(因为它服务于该客户的另一个正在运行的项目)。并且 id 是一个 varchar 顺便说一句。在这里并不重要,但更能说明问题:D
    • 您尝试将 ManyToOne 定义为从新闻(多)到类别(一)。但是如果一个类别是由id + pID + webID 指定的,你怎么能将一个类别链接到只有webID + category 的新闻?
    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多