【发布时间】:2011-11-06 18:06:48
【问题描述】:
我在 Doctrine 2.1 中遇到了这种行为,我正在寻找一个不错的“解决方法”。问题如下:
我有一个用户实体:
/**
* @Entity(repositoryClass="Application\Entity\Repository\UserRepository")
* @HasLifecycleCallbacks
*/
class User extends AbstractEntity
{
/**
*
* @var integer
*
* @Column(type="integer",nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
*
* @var \DateTime
* @Column(type="datetime",nullable=false)
*/
protected $insertDate;
/**
*
* @var string
* @Column(type="string", nullable=false)
*/
protected $username;
/**
*
* @ManyToOne(targetEntity="UserGroup", cascade={"merge"})
*/
protected $userGroup;
}
还有一个用户组实体:
/**
* @Entity
*/
class UserGroup extends AbstractEntity
{
/**
*
* @var integer
*
* @Column(type="integer",nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
*
* @var string
* @Column(type="string",nullable=false)
*/
protected $name;
}
如果我实例化一个用户对象(使用 Zend_Auth 执行此操作)并且 Zend_Auth 将其自动放入会话。
但问题是,我在下一页从会话中将其拉回,然后用户类中的数据被完美加载,但未在 userGroup 关联中加载。如果我将 cascade={"merge"} 添加到用户对象的注释中,则会加载 userGroup 对象但数据为空。如果你转储类似的东西:
$user->userGroup->name
你会得到 NULL 回来。问题是在用户对象保存在会话中之前没有访问用户组实体的数据,因此将返回一个空的初始化对象。如果我这样做:
echo $user->userGroup->name;
在我将用户对象存储在会话中之前,关联用户组的所有数据都已成功保存,如果我尝试访问 $user->userGroup->name 变量,则不会在下一页返回 NULL。
有没有简单的方法来解决这个问题?我可以在用户类中手动加载用户组对象/关联与生命周期回调@onLoad 吗?有什么建议吗?
【问题讨论】:
标签: php orm doctrine-orm