2012-09-30 15 views
1

我需要獲取Doctrine 2實體的數組表示形式。我發現這個庫 網上,我使用這個類用於此目的:Doctrine class EntitySerializer在每個實體關係上返回null

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

的事情是班級工作很好,但問題是,實體 的每一個屬性,它是一個關係另一個實體(多對一)在結果數組的每個字段上的值爲null。

一個真實的例子:

我有實體的人:

<?php 

命名實體;

/** * @Entity(repositoryClass = 「庫\ PersonRepository」) */ 類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和名稱 - >男性)。 當我使用這個類來那個人對象數組轉換,我得到了這樣的結果:

「ID」: 「1」, 「名字」: 「LH」, 「中間名」: 「」, 「 lastname「:」kbkjbkl「, 」dob「:{ 」date「:」1982-05-25 00:00:00「, 」timezone_type「:3, 」timezone「:」America/New_York「 } , 「home_phone_number」: 「8798798」, 「work_phone_number」: 「987987」, 「cell_phone_number」: 「987987」, 「SSN」: 「98798」, 「電子郵件」: 「kjhlkjlk」, 「性別」:{ 「ID」:無效, 「名」:空 }, 「種族」:{ 「ID」:無效, 「名」:空 }, 「地址」: { 「ID」:無效, 「ADDRESS_LINE1」:空, 「ADDRESS_LINE2」:空, 「城市」:空, 「拉鍊」:空, 「狀態」:空 }, 「婚姻狀況」: { 「id」:null, 「name」:null }

注意突出顯示的性別值(具有空值)。當它應該有1和男性。

我會很感激任何幫助。

+1

我明白了。問題是,當教條從數據庫加載實體時,除非您訪問它,否則不會加載關係。在您訪問其中一個關係時,教義執行查詢並獲取信息。在我的情況下,所有的關係都是空的,因爲從來沒有被訪問過。這種加載方法在教義中稱爲延遲加載。 – slash28cu

+0

創建您自己的答案並接受它。這樣,你的問題就不會得到解決。而且,您創建了兩個問題,您可以在創建後20分鐘內回答問題。也許你應該在發佈之前多搜索一下。 ;-) – mbinette

回答

0

我明白了。問題是,當教條從數據庫加載實體時,除非您訪問它,否則不會加載關係。在您訪問其中一個關係時,教義執行查詢並獲取信息。在我的情況下,所有的關係都是空的,因爲從來沒有被訪問過。這種加載方法在教義中稱爲延遲加載。

+0

你可以強制它用它的關係完全加載一個實體。 – Orbling

2

在反序列化過程中,您可能還會丟失一些信息,因爲您的級聯選項僅在分離時出現。爲了確保信息在您的實體中反序列化,請添加合併 - cascade = {「detach」,「merge」}。 或使用 - cascade = {「all」} 僅供參考請參閱:8.6。傳遞持續性/級聯操作 : Doctrine documentation