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().