5

आप एक इकाई सम्मिलित करना चाहते हैं जब आप ऐसा करते:आप डॉक्टर 2 के भीतर एंटिटी रिलेशनशिप के साथ कैसे काम करते हैं?

$user = new User(); 
$user->setEmail('[email protected]'); 

$em->persist($user); 
$em->flush(); 

लेकिन क्या होगा अगर मैं एक लेख हो सकता है जो एक उपयोगकर्ता बनाना चाहते हैं;

वर्तमान में, मैं क्या करने की जरूरत:

$user = $em->getRepository('User')->find($id); 
$article->setUser($user); 

इस संबंध की वजह से है, सिद्धांत 2 एक उपयोगकर्ता इकाई के लिए पूछता है।

हालांकि, मैं नहीं "नकली" एक उपयोगकर्ता वस्तु है, क्योंकि मैं आईडी मैन्युअल रूप से सेट किया जा सकता, इसलिए मैं ऐसा नहीं कर सकते नहीं करना चाहती कर सकते हैं:

$user = new User(); 
$user->setId(45); 

मैं इस बारे में गलत हूँ व्यवहार, आप कैसे करते हैं?

यह कैश के साथ भी रिश्ते को सेट करने के लिए उपयोगकर्ता इकाई को लोड करने के लिए प्रदर्शन मामला हो सकता है, जो हमेशा एक विकल्प नहीं हो सकता है, खासकर एक अपडेट के लिए।

उत्तर

10

आप किसी प्रबंधित उपयोगकर्ता इकाई काम नहीं है, तो, क्या आप चाहते हैं एक reference proxy, जो ईएम आप देने के लिए खुश हो जाएगा है:

<?php 
$article = new Entity\Article(); 
$article->setTitle('Reference Proxies Rule'); 
$article->setBody('...'); 
$article->setUser($em->getReference('Entity\User',45)); 
$em->persist($article); 
$em->flush(); 
+0

बहुत बढ़िया, धन्यवाद (दोबारा!) – JohnT

+0

लॉल टिम, फिर यह छद्म 'getReference()' फ़ंक्शन दिन बचाता है। बीटीडब्ल्यू - आपके कोड '$ em() 'में टाइपो। – Cobby

+0

@Cobby - ऐसा लगता है कि # 1 स्पष्ट रूप से प्रलेखित-लेकिन-अक्सर अनदेखी सुविधा है। शायद हमें के लिए एक सभ्य उपयोग-केस मिला है। टाइप टॉप के लिए धन्यवाद। – timdev

-1

आपके आलेख को उपयोगकर्ता को पहली जगह में आईडी रखने की आवश्यकता क्यों है? आप EntityManager के बिना अपनी इकाइयों का परीक्षण करने में सक्षम होना चाहिए, यदि आप नहीं कर सकते हैं तो आप शायद कुछ गलत कर रहे हैं। फिर जब आप कार्यात्मक इकाई परीक्षण करते हैं तो यह simple as this है।

मैं आपको ज़ेंड कास्ट से Unit Testing Doctrine 2 Entities देखने की सलाह देता हूं।

+1

ठीक है, कि, समस्या नहीं है या तो मौजूदा उपयोगकर्ता या नहीं, अगर मैं किसी मौजूदा उपयोगकर्ता के साथ अपना आलेख अपडेट करना चाहता हूं, तो मुझे पहले उपयोगकर्ता इकाई को पहले लाने की आवश्यकता है, अन्यथा यदि उपयोगकर्ता के पास आईडी नहीं है तो Doctrine2 उपयोगकर्ता के बारे में कैसे जान सकता है? मेरे आलेख को बिल्कुल उपयोगकर्ता को वैध होने की आवश्यकता नहीं है। मैं बस इतना कह रहा हूं कि मैं किसी इकाई को अपनी आईडी सेट करने की अनुमति नहीं दे सकता और इसलिए उपयोगकर्ता ऑब्जेक्ट का नकल कर सकता हूं। – JohnT

+0

बीटीडब्ल्यू, लिंक के लिए धन्यवाद लेकिन मुझे पहले से ही इस स्क्रीनकास्ट को पता है लेकिन मुझे एंटिटी यूनिट परीक्षण से संबंधित वास्तव में उपयोगी नहीं मिला। – JohnT

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^