更新实体时需要代理

时间:2015-03-16 02:17:51

标签: doctrine-orm

情况是,当我尝试更新与另一个实体具有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

1 个答案:

答案 0 :(得分:0)

我发现在学说中,如果使用关系数据库,代理是必须的,或者你可以保持你的关系不超过一个级别。

例如:

1. MemberOneToMany的{​​{1}}。

2. BookBook

ManyToOne

3. MemberBookComment

ManyToOne

你有:

  1. Book获取图书不需要代理。

  2. Member获取Member需要代理。

  3. 我认为这是因为教义需要避免无限从数据库获取关系。因此,如果关系链接大于一个级别,则学说确定使用延迟加载。