9

私は次のようなクラスを持っています:

/** @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の所有者であり、配列ではなく1つのオブジェクトのみです。私の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();
    }
}
4

4 に答える 4

32

フェッチモードをEAGERに変更してみてください。

@ORM\ManyToOne(targetEntity="****", fetch="EAGER"). 

それは私のために働いた。

于 2017-01-20T11:52:19.973 に答える
21

これは、遅延読み込みの問題のように見えます。オブジェクトからWebサービスの回答にデータを取得するにはどうすればよいですか?

Doctrine2は、他に何かを構成しない場合、遅延読み込みになります。つまり、$groups = $em->getRepository("orgGroup")->findAll();実際のorgGroupオブジェクトではなく、プロキシオブジェクトを返します(Doctrine Documentation)。

つまり、オブジェクトは、または$groupを呼び出すまで(その後、Doctrineが自動的にロードするまで)その説明またはorgGroupType値を持たないため、WebサービスのJSON応答にデータを書き込む前にそれを行う必要があります。getterメソッドを使用せずにオブジェクトのプロパティをループする場合は機能しません。$group->getDescription()$group->getOrgGroupType()

それが問題だったと思います:)

于 2012-11-19T12:27:53.353 に答える
2
//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 、それは私のデータベースでは何もしませんでした

于 2018-10-02T15:49:30.407 に答える
1

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;
于 2012-11-17T14:53:46.360 に答える