WebアプリケーションでManyToMany関係を完了する際に問題があります。エンティティレコードの関連付け問題
エンティティの連絡先とタグがあります。
問い合わせ
/**
* Contact
*
* @ORM\Table(name="contacts")
* @ORM\Entity(repositoryClass="Admin\MainBundle\Repository\ContactRepository")
*/
class Contact
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="contacts", cascade={"all"})
* @ORM\JoinTable(name="contact_tag_relation",
* joinColumns={@ORM\JoinColumn(name="contact_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
タグ
/**
* Tag
*
* @ORM\Table(name="tags")
* @ORM\Entity(repositoryClass="Admin\MainBundle\Repository\TagRepository")
*/
class Tag
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var ArrayCollection
* @ORM\ManyToMany(targetEntity="Admin\MainBundle\Entity\Contact", mappedBy="tags", cascade={"all"})
* @ORM\JoinTable(name="contact_tag_relation",
* joinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="contact_id", referencedColumnName="id")}
* )
*/
private $contacts;
コントローラの要求ハンドラ: - へ - 多くの次のコードで書かれている多くの関係。
public function editAction(Request $request, Tag $tag, Contact $contact = null)
{
$deleteForm = $this->createDeleteForm($tag);
$editForm = $this->createForm('Admin\MainBundle\Form\TagType', $tag);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->flush();
return $this->redirectToRoute('tags_edit', array('id' => $tag->getId()));
}
return $this->render('AdminMainBundle:Tag:edit.html.twig', array(
'tag' => $tag,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
TagType法タグを編集するための場所にGET要求後
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('contacts');
}
、サーバは、現在に関連する顕著な接点と電流値と複数選択入力フィールドを充填したタグのタイトルを変更するための入力フィールドを返しますタグ。 複数選択欄に変更を加えて送信すると、変更が記録されません。
ここで問題が発生する可能性がありますか?どのようにこれを解決し、コードをきれいに保つ?
contacts属性は、コントローラのメソッドでは永続的コレクション型として表され、その属性はダーティーとしてフラグが付けられます。
UDATE 1:
タグの(GE & SE)tters:
/**
* Add contact
*
* @param \Admin\MainBundle\Entity\Contact $contact
*
* @return Tag
*/
public function addContact(\Admin\MainBundle\Entity\Contact $contact)
{
$this->contacts[] = $contact;
return $this;
}
/**
* Remove contact
*
* @param \Admin\MainBundle\Entity\Contact $contact
*/
public function removeContact(\Admin\MainBundle\Entity\Contact $contact)
{
$this->contacts->removeElement($contact);
}
/**
* Get contacts
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getContacts()
{
return $this->contacts;
}
連絡先の(SE GE &)tters:
/**
* Add tag
*
* @param \Admin\MainBundle\Entity\Tag $tag
*
* @return Contact
*/
public function addTag(\Admin\MainBundle\Entity\Tag $tag)
{
$this->tags[] = $tag;
return $this;
}
/**
* Remove tag
*
* @param \Admin\MainBundle\Entity\Tag $tag
*/
public function removeTag(\Admin\MainBundle\Entity\Tag $tag)
{
$this->tags->removeElement($tag);
}
/**
* Get tags
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getTags()
{
return $this->tags;
}
'Tag.php'の' contacts'属性のゲッターとセッターを表示できますか? – Jeet
もちろん。今すぐあなたはそれらをUDATE 1で見ることができます。 – OHNH
私は方法を見ましたが、何の問題も見ません。しかし、あなたはこれによって何を意味するのか説明できます: '連絡先属性は、コントローラのメソッドで永続収集型として表され、その属性はダーティーとしてフラグが立てられます.' – Jeet