原则 3:一对一的单向关系不会返回所有字段
Posted
技术标签:
【中文标题】原则 3:一对一的单向关系不会返回所有字段【英文标题】:Doctrine 3: one-to-one Unidirectional relationship doesn't return all fields 【发布时间】:2020-11-22 12:46:08 【问题描述】:我有 2 个实体:Thesis 和 DoList。
每个 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:一对一的单向关系不会返回所有字段的主要内容,如果未能解决你的问题,请参考以下文章