मेरे पास तीन सिद्धांत इकाइयां हैं: डिवाइस, जिसमें डिवाइस \ स्थिति के साथ OneToOne संबंध है, जिसके बदले डिवाइस \ Status \ बैटरी के साथ एक OneToOne संबंध है।सिद्धांत 2 बहु-स्तर OneToOne कैस्केड
मेरे पास संबंधित संस्थाओं के बीच {cascade = "persist"} सेट है, और जो मैंने पढ़ा है, उससे यह होना चाहिए कि सिद्धांत के लिए यह आवश्यक होना चाहिए कि प्रत्येक इकाई को अपने आप में कुछ भी करने के बिना स्वचालित रूप से बने रहें कोड।
यहाँ है कि मैं क्या साथ समस्या हो रही हूँ:
Entity of type Device\Status\Battery has identity through a foreign entity
Device\Status, however this entity has no identity itself. You have to call
EntityManager#persist() on the related entity and make sure that an identifier
was generated before trying to persist 'Device\Status\Battery'. In case of
Post Insert ID Generation (such as MySQL Auto-Increment or PostgreSQL SERIAL)
this means you have to call EntityManager#flush() between both persist
operations.
मेरा प्रश्न है:
$device = new \Entities\Device();
$device->setId(100);
$status = $device->getStatus();
$status->setIpAddress('192.168.0.1');
$battery = $status->getBattery();
$battery->setInternalLevel(60);
$em->persist($device);
$em->flush();
इस कोड को क्रियान्वित करने के बाद, मैं निम्नलिखित त्रुटि मिलती है क्या सेटअप करने के लिए सही तरीका क्या है मेरी यह सुनिश्चित करने के लिए संस्थाएं कि वे सही क्रम में बने रहें?
संस्थाओं के लिए कोड यहां पाया जा सकता: https://gist.github.com/1753524
सभी परीक्षणों सिद्धांत 2.2 सैंडबॉक्स का उपयोग किया गया है।
मुझे लगभग एक ही समस्या थी। यू को प्रत्येक persist के बीच फ्लश कॉल करना है। – CappY
@CappY सिद्धांत दस्तावेज़ों के अनुसार, क्योंकि मेरे पास प्रत्येक इकाई के लिए {cascade = "persist"} सेट है, इसलिए मुझे प्रत्येक इकाई को मैन्युअल रूप से जारी रखने की आवश्यकता नहीं है। यह कोड * जैसा * काम करना चाहिए। http://readthedocs.org/docs/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations – Taeram
कृपया एक [लघु, स्वयं निहित, सही उदाहरण] प्रदान करें (http : //sscce.org/)। आपका कोड सीधे 'संरक्षित' गुणों, यानी '$ डिवाइस-> आईडी = 100' – Phil