Orm 原则2 OneTONE实体映射返回空实体

Orm 原则2 OneTONE实体映射返回空实体,orm,doctrine,mapping,doctrine-orm,Orm,Doctrine,Mapping,Doctrine Orm,设置: 我有以下代码两个实体模型: 帐户,表示用户帐户,并具有指向教室的外键 <?php namespace models; /** * @Entity */ class Account { /** * @Id @Column(type="integer") * @GeneratedValue(strategy="AUTO") */ public $id; /** * @OneToOne(targetEntity="C

设置:

我有以下代码两个实体模型:

帐户,表示用户帐户,并具有指向教室的外键

<?php
namespace models;

/**
 * @Entity
 */
class Account
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @OneToOne(targetEntity="Classroom")
     */
    public $classroom;
}
然后我执行
$em->find('Account',$id)
和account对象中的教室对象正确返回

猜测:

我假设从数据库加载和缓存实体的方式有问题,因为如果我在执行
find()
之前加载所有教室对象(或与帐户I关联的对象),那么一切都正常

由于我是PHP和条令的初学者,我寻求进一步的意见/帮助来解决这个问题。

来自:

任何实体类的所有持久属性/字段都应始终是私有的受保护的,否则延迟加载可能无法按预期工作

您的
$chorchy
属性是
public
,这可能就是与教室实体的关联没有被延迟加载的原因。您应该将其更改为
private
protected
(我建议将所有实体属性
设置为protected
,例如)

如果这不起作用,您可以尝试将
OneToOne
关联的
fetch
属性设置为EAGER,即

/**
*@OneToOne(targetEntity=“教室”,fetch=“渴望”)
*/
受保护的教室;
<?php
namespace models;

/**
 * @Entity
 */
class Classroom
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @Column(type="string")
     */
    public $name;
}
$em->getRepository('Classroom')->findAll().