2013-01-21 12 views
14

मुझे इसके लिए सही परिणाम खोजने में कठिनाई हो रही है।सिद्धांत के साथ आलसी लोडिंग एक से एक मैपिंग

मेरे पास एक से एक मैपिंग है। वहाँ दो तालिकाओं हैं:

/** 
* @ORM\Table(name="users") 
* @ORM\Entity 
*/ 
class Users { 

    /** 
    * @ORM\OneToOne(targetEntity="UsersSettings", mappedBy="user",cascade={"persist"}) 
    */ 
    private $userSetting; 

    //getters and setters 
} 

/** 
* @ORM\Table(name="notifications_settings") 
* @ORM\Entity 
*/ 
class UsersSettings { 

    /** 
    * @var Users 
    * 
    * @ORM\OneToOne(targetEntity="Users", inversedBy="userSetting") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    * }) 
    */ 
    private $user; 
} 

जब भी मैं इकाई एक के रूप में नीचे लाने:

$q = $this 
      ->createQueryBuilder('u') 
      ->select('u, r') 
      ->leftJoin('u.roles', 'r') 
      ->where('u.username = :username OR u.email = :email') 
      ->setParameter('username', $username) 
      ->setParameter('email', $username) 
      ->getQuery(); 

सिद्धांत तुरंत प्रदर्शन usersSettings इकाई जो मैं न चाहते करने के लिए शामिल हो:

t0.id चयन के रूप में id1, t0.username AS उपयोगकर्ता नाम 2, t0.email AS ईमेल 3, t0.password AS password4, t29.id AS id30, t29.is_notify_by_email AS is_notify_by_email31, t29.user_id AS user_id32 उपयोगकर्ताओं से t0 LEFT JOIN उपयोगकर्ता_सेटिंग t29 t29.user_id = t0.id पर कहां t0.id =?

OneToMany और ManyToOne तरह मानचित्रण के अन्य प्रकार आलसी लोड हो रहा है करता है, लेकिन एक के बाद एक मानचित्रण करने के मामले में, मैं आलसी लोड करने के लिए कॉन्फ़िगर नहीं कर सका। मैं इस संबंध को आलसी कैसे लोड कर सकता हूं? मैं सिद्धांत 2.3 और सिम्फनी 2.1

उत्तर

0

का उपयोग कर रहा हूं आप extra lazy 0 टिप्पणियों में fetch="EXTRA_LAZY" का उपयोग करके एसोसिएशन लोड कर सकते हैं।

* @ORM\OneToOne(targetEntity="Users", inversedBy="userSetting", fetch="EXTRA_LAZY") 
+4

अभी भी अतिरिक्त_लाज़ी जोड़ने के बाद तालिकाओं में शामिल हो जाता है। मैंने पहले भी कोशिश की थी लेकिन काम नहीं किया – sonam

+0

क्या आपका सर्वर एपीसी का उपयोग करता है? अपनी एनोटेशन अपडेट करने के बाद सुनिश्चित करें कि आपका एपीसी कैश साफ़ हो गया है (यदि आपको करना है तो अपाचे अपाचे को पुनरारंभ करें)। मुझे कुछ सिद्धांत सिद्धांतों के साथ समस्याएं नहीं आ रही हैं जब तक कि मैं अपाचे को पुनरारंभ नहीं करता। – lifo

+0

मैंने पहले एपीसी सक्षम किया था लेकिन विकास के दौरान सिरदर्द बन गया था इसलिए एपीसी – sonam

13

आलसी लोडिंग से बचने के लिए संकेत HINT_FORCE_PARTIAL_LOAD का उपयोग करें।

... 
$qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); 
+3

यह निश्चित रूप से एक और समस्या का खुलासा करता है - यदि आप केवल उस इकाई की कुंजी मान (उदाहरण के लिए आईडी) प्राप्त करना चाहते हैं जो शामिल नहीं था, तो यह एक अपवाद उठाएगा। –

+0

मेरे लिए, इससे मदद मिली - लेकिन मुझे डर है कि इससे अन्य त्रुटियां पैदा होंगी ....... –