私は、参加者にあなたのユーザー/国の関係と違うことのないイベントを持つプロジェクトで同様のことをします。私はプロセスをレイアウトするだけで、あなたが何か異なることをしているかどうかを知ることができます。私はこのような初期化Event#__constructor
でも
/**
* @OneToMany(targetEntity="Participant", mappedBy="event")
* @var \Doctrine\Common\Collections\ArrayCollection
*/
protected $participants;
:Participant
エンティティEvent
エンティティで
/**
* @ManyToOne(targetEntity="Event", inversedBy="participants", fetch="LAZY")
* @JoinColumn(name="event_id", referencedColumnName="id", nullable="TRUE")
* @var Event
*/
protected $event;
で
ここ
$this->participants = new \Doctrine\Common\Collections\ArrayCollection();
は、私がイベントを更新する方法です。
public function update(Event $event, Event $changes)
{
// Remove participants
$removed = array();
foreach($event->participants as $participant)
{
if(!$changes->isAttending($participant->person))
{
$removed[] = $participant;
}
}
foreach($removed as $participant)
{
$event->removeParticipant($participant);
$this->em->remove($participant);
}
// Add new participants
foreach($changes->participants as $participant)
{
if(!$event->isAttending($participant->person))
{
$event->addParticipant($participant);
$this->em->perist($participant);
}
}
$event->copyFrom($changes);
$event->setUpdated();
$this->em->flush();
}
Event
エンティティの方法があります:Participant
エンティティの
public function removeParticipant(Participant $participant)
{
$this->participants->removeElement($participant);
$participant->unsetEvent();
}
public function addParticipant(Participant $participant)
{
$participant->setEvent($this);
$this->participants[] = $participant;
}
方法は以下のとおりです。
public function setEvent(Event $event)
{
$this->event = $event;
}
public function unsetEvent()
{
$this->event = null;
}
UPDATE:isAttending方法
/**
* Checks if the given person is a
* participant of the event
*
* @param Person $person
* @return boolean
*/
public function isAttending(Person $person)
{
foreach($this->participants as $participant)
{
if($participant->person->id == $person->id)
return true;
}
return false;
}
正確にどのようなヨ達成しようとしていますか?あなたはすべての国を削除しようとしていますか?あるいは、ある国を削除しようとしていますか?あなたは、ドキュメントの関連付けのセクションを読んだことがありますか?http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-associations.html#removing-associations – rojoca
はい@rojoca私はそれをすべて読んだ。そして、私はより多くの異なる国のためにそれらを変更することができるように、1つのユーザーエンティティに関連付けられているすべての国を削除しようとしています。 –