2012-06-25 12 views
5

एक ऐसी इकाई को विलय करने के बाद जिसमें संबंधों के संबंध में संबंधित इकाइयां संबंधित हैं और दोनों परिचालनों को विलय कर रहे हैं तो संबंध खो गए हैं!सिद्धांत 2.1 - कई टोमनी कैस्केड मर्ज के बाद रिलेशन खो गया - सिम्फनी 2

class Event implements NormalizableInterface 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Participant", inversedBy="events", cascade={"persist", "merge"}) 
    * @ORM\JoinTable(name="event_participant", 
    *  joinColumns={@ORM\JoinColumn(name="event_id", referencedColumnName="id", onDelete="CASCADE")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="participant_id", referencedColumnName="id", onDelete="CASCADE")} 
    *  ) 
    */ 
    private $participants; 
} 


class Participant implements NormalizableInterface 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Event", mappedBy="participants", cascade={"persist", "merge"}) 
    */ 
    protected $events; 
} 

यहाँ मेरी मिलती हैं::

foreach ($events as $event) 
{ 
    if (!$event->hasParticipant($participant)) { 

     $event->addParticipant($participant); 
    } 
    if (!$participant->hasEvent($event)) { 

     $participant->addEvent($event); 
    } 
} 

यहाँ मेरी मर्ज कोड है:

echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL; 

$event = $em->merge($event); 

echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL; 

... और यहां उत्पादन होता है

यहाँ संस्थाओं कर रहे हैं:

Before merge participant count: 2 
After merge participant count: 0 

..और डेटाबेस इस तरह दिखता है:

table    | rows 
------------------------------- 
event    | 1 
------------------------------- 
participant   | 2 
------------------------------- 
event_participant | 0 
------------------------------- 

किसी को भी देख सकते हैं, जहां मैं गूंगा जा रहा हूँ?

बीटीडब्ल्यू इस से अधिक रिश्ते हैं। स्पष्टीकरण स्पष्ट करने के लिए मैंने यहां चीजों को सरल बना दिया है। विलय से मेरे अन्य संबंध नकारात्मक रूप से प्रभावित नहीं होते हैं। इसके अलावा मैं कंसोल कमांड में मर्ज कर रहा हूं कंट्रोलर में नहीं। अगर यह :)

इसके अलावा, मैं सिद्धांत 2.1.7 और Symfony 2.0.15

बहुत धन्यवाद, मैथ्यू

+0

सिद्धांत ORM प्रलेखन, बजाय निजी एक की रक्षा की संपत्तियों का उपयोग करने के मर्ज के एक मामले में सलाह देते हैं। मुझे लगता है कि कोशिश करने लायक है। इसके अलावा, आप मर्ज का उपयोग क्यों कर रहे हैं? – AdrienBrault

उत्तर

1

मुझे एक ही समस्या मिली और कुछ मिनटों के बाद मैंने एक साधारण विचार की कोशिश की, बस कोड ऑर्डर बदलें और विलय को इकाई के नए उदाहरण के रूप में मानें, मुझे पता चलता है कि मर्ज कार्रवाई संबंधों को हटा सकती है, इसलिए:

$user = new User(); 
$user->setName('name'); 
$user->setAge('24'); 

$mergedUser = $em->merge($user); 

// Imagine we have some groups to add 
foreach ($groups as $group) { 
    $mergedUser->addGroup($group); 
} 

$em->flush(); 

यह मेरे लिए काम करता है।

मुझे उम्मीद है कि यह मदद करता है।

3

मैं एक ही मुद्दे का सामना करना पड़ा है, और यह तय मर्ज के बाद इकाई ताज़ा द्वारा:

$mergedEntity = $entityManager->merge($serializedEntity); 
$entityManager->refresh($mergedEntity); 
संबंधित मुद्दे