我有一个像下面这样的类:

/** @Entity **/
class orgGroup{

    //id and stuff...

    /**
     * @Column(type="string")
     **/
    private $name;

    /**
     * @Column(type="string", nullable=true)
     **/
    private $description;

    /**
     * @ManyToOne(targetEntity="orgGroupType", inversedBy="_orgGroups")
     * @JoinColumn(name="_orgGroupType")
     **/

    private $_orgGroupType;

    //...
}

但是当我通过数据库从数据库加载此对象时
$groups = $em->getRepository("orgGroup")->findAll();

我只是正确获得名称,但没有正确获得_orgGroupType ...,我不知道为什么... OrgGroup是orgGroupType及其仅一个对象而不是数组的所有者。我的Web服务总是说:
{"error":[],"warning":[],"message":[],"data":[{"name":"AdministratorGroup","description":null,"_orgGroupType":{"__ isInitialized __":false}}]}

结果是:
"name":"AdministratorGroup",
"description":null,
"_orgGroupType":{"__ isInitialized __":false}

但应为:
"name":"AdministratorGroup",
"description":"some description",
"_orgGroupType":{name:"test"}

因此,存在 2 错误...,我不知道为什么。
在数据库中正确设置了所有数据。

有任何想法吗?

编辑:
这是我的orgGroupType -entity缺少的代码
/** @Entity **/
class orgGroupType {
    /**
     * @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType")
     **/
    private $_orgGroups;

    public function __construct()
    {
        $this->_orgGroups = new ArrayCollection();
    }
}

最佳答案

在我看来,这就像一个懒惰的问题。您如何将数据从对象获取到Webservice答案中?

如果您未配置其他内容,则Doctrine2会延迟加载,这意味着$groups = $em->getRepository("orgGroup")->findAll();不会返回真正的orgGroup对象,而是返回代理对象(Doctrine Documentation)。

这意味着,在您调用$group$group->getDescription()(然后Doctrine自动将它们加载)之前,$group->getOrgGroupType()对象将没有其描述或orgGroupType值,因此您需要在将数据写入Web服务的JSON响应之前执行此操作。如果您以某种方式不使用getter方法循环遍历对象属性,则将无法正常工作。

我希望这是问题所在:)

关于php - doctrine2关联未初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13431614/

10-10 16:17