原则 3:一对一的单向关系不会返回所有字段

Posted

技术标签:

【中文标题】原则 3:一对一的单向关系不会返回所有字段【英文标题】:Doctrine 3: one-to-one Unidirectional relationship doesn't return all fields 【发布时间】:2020-11-22 12:46:08 【问题描述】:

我有 2 个实体:ThesisDoList

每个 DoList 属于 0 或 1 个论文。所以我们有一个从 DoList 到 Thesis 的单向一对一关系。这是论文:

class Thesis

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     * @var int
     */
    protected int $thesisID;

和DoList:

    /**
     * @ORM\OneToOne(targetEntity="Thesis")
     * @ORM\JoinColumn(name="thesisID", referencedColumnName="thesisID", nullable=true)
     */
    protected $thesisID;

当然,我减少了课程,只显示重要的部分。

据我所知。 @ORM\JoinColumn 应该加入表 DoList 和 Thesis on DoList.thesisID 和 Thesis.thesisID。

我在这种关系中保留 thesisID 没有问题,但我无法从 DoList 中选择所有值时检索 thesisID 的值,它总是为空。 p>

编辑:

列名两边都必须是sisID。

【问题讨论】:

【参考方案1】:

错误是我在使用查询生成器时没有加入表。 我认为当使用查询构建器原则进行查询并从表中选择所有行时,会读取我在模型上指定的关系并自动执行连接查询。

注意:当您在模型上指定该选项时,DOCTRINE 不会自动加入表格。您需要在 QUERYBUILDER 上执行 JOIN 功能。

$qb->select(['u', 'c'])
            ->from('ThesisNET\Models\DoList', 'u')
            ->join('u.thesisID', 'c')
            ->where('u.instructor = ?1')
            ->setParameter('1', $username);

这就是它最终的工作方式。 (我刚刚添加了加入选项。)

【讨论】:

以上是关于原则 3:一对一的单向关系不会返回所有字段的主要内容,如果未能解决你的问题,请参考以下文章

使 Mikro-ORM 关系字段可选

建表原则

JPA 单向一对多关联关系

JPA - 使用 EclipseLink 保持单向一对多关系失败

hibernate学习四 hibernate关联关系映射

1-7 hibernate关联关系映射