【问题标题】:Doctrine 3: one-to-one Unidirectional relationship doesn't return all fields原则 3:一对一的单向关系不会返回所有字段
【发布时间】: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。

【问题讨论】:

    标签: orm doctrine


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多