Sau khi hợp nhất một thực thể có các thực thể liên quan với các mối quan hệ được thiết lập để thực hiện các hoạt động liên tục và hợp nhất, các mối quan hệ bị mất!Doctrine 2.1 - Relation Lost After ManyToMany Cascade Merge - Symfony2
Dưới đây là các đối tượng:
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;
}
Dưới đây là tham gia của tôi:
foreach ($events as $event)
{
if (!$event->hasParticipant($participant)) {
$event->addParticipant($participant);
}
if (!$participant->hasEvent($event)) {
$participant->addEvent($event);
}
}
Đây là mã hợp nhất của tôi:
echo "Before merge participant count: ".count($event->getParticipants()).PHP_EOL;
$event = $em->merge($event);
echo "After merge participant count: ".count($event->getParticipants()).PHP_EOL;
... và đây là kết quả:
Before merge participant count: 2
After merge participant count: 0
..và cơ sở dữ liệu trông như thế này:
table | rows
-------------------------------
event | 1
-------------------------------
participant | 2
-------------------------------
event_participant | 0
-------------------------------
bất cứ ai có thể nhìn thấy nơi tôi đang bị câm?
BTW có nhiều mối quan hệ hơn thế này. Tôi đã đơn giản hóa mọi thứ ở đây để làm cho giải thích rõ ràng hơn. Các mối quan hệ khác của tôi không bị ảnh hưởng tiêu cực bởi sự hợp nhất. Ngoài ra tôi đang làm việc hợp nhất trong một giao diện điều khiển Command không phải là một trong một bộ điều khiển. Tôi có thể gửi mã hơn nếu nó sẽ giúp :)
Ngoài ra tôi đang sử dụng Học thuyết 2.1.7 và Symfony 2.0.15
Rất cám ơn, Matthew
Các tài liệu ORM thuyết khuyên bạn nên sử dụng tài sản được bảo vệ thay vì một cá nhân, trong một trường hợp hợp nhất. Tôi nghĩ rằng nó có giá trị để thử. Ngoài ra, tại sao bạn sử dụng hợp nhất? – AdrienBrault