Php doctrine2关联未初始化

Php doctrine2关联未初始化,php,symfony,doctrine,doctrine-orm,Php,Symfony,Doctrine,Doctrine Orm,我的课程如下: /** @Entity **/ class orgGroup{ //id and stuff... /** * @Column(type="string") **/ private $name; /** * @Column(type="string", nullable=true) **/ private $description; /** * @ManyToOne(targ

我的课程如下:

/** @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及其仅一个对象而非数组的所有者。我的网络服务总是说:

{"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"}
所以有两个错误。。。我不知道为什么。 数据库中的所有数据都已正确设置

有什么想法吗

编辑: 下面是我的orgGroupType-entity缺少的代码

/** @Entity **/
class orgGroupType {
    /**
     * @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType")
     **/
    private $_orgGroups;

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

确保在orgGroupType实体中初始化orgGroups集合

/**
 * @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType")
 */
protected $orgGroups ;

public function __construct() {
    $this->orgGroups = new ArrayCollection();
}
您可能需要在实体中包括以下内容

use Doctrine\Common\Collections\Collection,
Doctrine\Common\Collections\ArrayCollection;

在我看来,这是一个延迟加载问题。如何将对象中的数据输入Webservice应答

如果不配置其他内容,Doctrine2是延迟加载,这意味着
$groups=$em->getRepository(“orgGroup”)->findAll()
不会返回真实的
orgGroup
对象,而是返回代理对象()

这意味着在调用
$group->getDescription()
$group->getOrgGroupType()
$group->getOrgGroupType()
之前,
$group
对象不会有其描述或orgGroupType值(然后Doctrine会自动加载它们),因此在将数据写入Web服务的JSON响应之前需要这样做。如果在不使用getter方法的情况下以某种方式循环对象属性,那么它将不起作用


我希望这就是问题所在:)

尝试将fetch模式更改为EAGER

@ORM\ManyToOne(targetEntity="****", fetch="EAGER"). 
这对我有用

//Group.php ...

public function addUser(User $user): self
{
    if (!$this->users->contains($user)) {
        $this->users[] = $user;
        $user->addJoinedGroup($this);     /** VERY IMPORTANT **/
    }
    return $this;
}
User.php中相同

没有它,它在我的数据库中什么也做不了

谢谢你的回答。但这并不能解决我的问题:(.我忘了发布orgGroupType类的代码,但它的实现与您发布的一样。我将缺少的代码追加到了我的第一篇文章中。您还有其他想法吗:-)?\u从数据库检索对象时不会调用构造OK。一个问题是,我的WebService函数没有将数据正确打包到json对象中。当我不访问orgGroupType对象时,它不会被初始化。但在我访问过一次之后,我可以很容易地将它打包。。。但是描述属性的另一个问题仍然没有解决。它只是一个字符串,我从entityManager得到“null”。在数据库中,我的对象看起来像:id:1 name:AdministratorGroup description:some description _orgGroupType:1,但entityManager给我的是:id:1 name:AdministratorGroup description:null _orgGroupType:1Did你只是在实体上调用json_encode?是的,类似于json_encode。这是第一个问题。但是“unset”description属性的另一个问题仍然没有解决…您的代码没有问题,尝试使用XDebugh观察代码中发生的情况,但是访问属性或调用自写的getter方法之间有什么区别?代理类从实体类继承并重写getter-如果调用它们,它们将调用
\u load
方法或类似方法,并从数据库中读取所需的数据。如果只调用
object->property
,那么代理类就无法启动延迟加载。这里有一个类似的问题:@Manuel?你是如何解决这个问题的?还有一个关于DoctrineCollection的问题,谢谢你的回答!我使用Symfony已经三年了,我不明白为什么有时候我的联想是空的。。。使用Twig中的“get”函数解决了我的问题。例如,我编写了
{{product.type.name}}
而不是
{{product.getType.name}}