情况是,当我尝试更新与另一个实体具有many to one
关系的实体时,它会抛出一条警告,指出代理不存在。因为我没有生成代理,所以无法找到。但问题是,它是否一直需要代理?
这是我的代码。
class UmMemberSectionInfo extends \DoctrineHelper {
// define the fields that is char dependent.
public static $CHAR_DEPENDENT = array('name');
/**
* @var \UmMemberSection
*
* @ManyToOne(targetEntity="UmMemberSection")
* @JoinColumns({
* @JoinColumn(name="member_id", referencedColumnName="id")
* })
*/
protected $member;
}
class UmMemberSection extends \DoctrineHelper {
/**
* var \UmMemberSectionInfo
*
* @OneToMany(targetEntity="UmMemberSectionInfo",mappedBy="member")
*/
protected $info;
}
当我使用merge()
EntityManager
作为UmMemberSectionInfo
的例子时,它会抛出
无法打开流:C:\php_projects\wcms\vendor\doctrine\orm\lib\Doctrine\ORM\Proxy\ProxyFactory.php on line 92
15 0.3056 16012680 Doctrine\ORM\UnitOfWork->createEntity( ) ..\SimpleObjectHydrator.php:135
16 0.3058 16015544 Doctrine\ORM\Proxy\ProxyFactory->getProxy( ) ..\UnitOfWork.php:2591
答案 0 :(得分:0)
我发现在学说中,如果使用关系数据库,代理是必须的,或者你可以保持你的关系不超过一个级别。
例如:
1. Member
是OneToMany
的{{1}}。
2. Book
是Book
ManyToOne
3. Member
是BookComment
ManyToOne
你有:
从Book
获取图书不需要代理。
从Member
获取Member
需要代理。
我认为这是因为教义需要避免无限从数据库获取关系。因此,如果关系链接大于一个级别,则学说确定使用延迟加载。