1

Doctrine 2 エンティティの配列表現を取得する必要があります。このライブラリをオンラインで見つけました。この目的のためにこのクラスを使用しています。

https://github.com/borisguery/bgylibrary/blob/master/library/Bgy/Doctrine/EntitySerializer.php

問題は、クラスがうまく機能することですが、問題は、別のエンティティ (多対 1) との関係であるエンティティのすべての属性が、結果の配列のすべてのフィールドで null 値を持つことです。

実際の例:

私はエンティティの人を持っています:

<?php

名前空間エンティティ;

/** * @Entity(repositoryClass="Repositories\PersonRepository") */ class Person {

/**
 * @Id @GeneratedValue
 * @Column(type="bigint")
 * @var integer
 */
protected $id;

/**
 * @Column(type="string", length=32)
 * @var string
 */
protected $firstname;

/**
 * @Column(type="string", length=32, nullable="true")
 * @var string
 */

 /**
 * @ManyToOne(targetEntity="Gender", cascade={"detach"})
 * @JoinColumn(name="gender", referencedColumnName="id")
 */
protected $gender;

そして、性別(id-> 1およびname-> Male)でデータベースに保存された1人の人物オブジェクトがあります。このクラスを使用してその人物オブジェクトを配列に変換すると、次の結果が得られました。

"id": "1", "firstname": "lh", "middlename": "", "lastname": "kbkjbkl", "dob": { "date": "1982-05-25 00:00: 00", "timezone_type": 3, "timezone": "アメリカ/ニューヨーク" }, "home_phone_number": "8798798", "work_phone_number": "987987", "cell_phone_number": "987987", "ssn": "98798 ", "email": "kjhlkjlk", "性別": { "id": null, "name": null }, "race": { "id": null, "name": null }, "address": { "id": null,"address_line1": null, "address_line2": null, "city": null, "zip": null, "state": null }, "marital_status": { "id": null, "name": null }

強調表示された性別の値に注意してください (null があります)。1とMaleが必要な場合。

どんな助けでも本当に感謝します。

4

2 に答える 2

2

カスケードオプションはデタッチのみであるため、デシリアライズ中に一部の情報が失われる可能性もあります。デシリアライズ時に情報がエンティティに確実に戻るようにするには、merge --cascade = {"detach"、"merge"}を追加する必要があります。または、-cascade = {"all"}を使用します。参照については、8.6を参照してください。推移的永続性/カスケード操作: Doctrineドキュメント

于 2012-10-17T16:16:01.363 に答える
0

わかった。問題は、doctrine がデータベースからエンティティをロードするとき、アクセスしない限りリレーションがロードされないことです。リレーションの 1 つにアクセスすると、doctrine がクエリを実行して情報を取得します。私の場合、アクセスされたことがないため、すべての関係が null になります。このロード方法は、教義では遅延ロードと呼ばれています。

于 2012-10-01T20:27:41.947 に答える