【发布时间】:2015-12-22 08:51:22
【问题描述】:
这里有新的 Symfony2 用户。我有 2 个相关的实体,一对多是单向的。我正在像doctrine documentation suggests、文章(一个)和标签(很多)一样做多对多。我希望显示在 article.new 页面和 article.edit 页面上显示标签名称的复选框。在表单提交时,标签实体的 id 存储在实体生成器为我创建的 article_tags 边表中。
只发布相关代码。
标记实体 AppBundle/Entity/Tag.php
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=20)
*/
public $name;
文章实体 AppBundle/Entity/Article.php
/**
* @ORM\ManyToMany(targetEntity="Tag")
* @ORM\JoinTable(
* name="article_tags",
* joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id", unique=true)}
* )
*/
protected $tags;
/**
* Add tag
*
* @param \AppBundle\Entity\Tag $tag
*
* @return Article
*/
public function addTag(\AppBundle\Entity\Tag $tag)
{
$this->tags[] = $tag;
return $this;
}
/**
* Remove tag
*
* @param \AppBundle\Entity\Tag $tag
*/
public function removeTag(\AppBundle\Entity\Tag $tag)
{
$this->tags->removeElement($tag);
}
/**
* Get tags
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getTags()
{
return $this->tags;
}
文章表单类型 AppBundle/Form/ArticleType
$builder->add('title')
->add('body')
->add('author')
->add('tags', 'entity', array(
'class' => 'AppBundle\Entity\Tag',
'property' => 'name',
'expanded' => 'true', ));
ArticleController AppBundle/Controller/ArticleController.php
* @Template()
*/
public function newAction()
{
$entity = new Article();
$tags = new Tag();
$entity->addTag($tags);
$form = $this->createCreateForm($entity);
return array('entity' => $entity,'form' => $form->createView(), );
}
截至目前,我收到的错误是...
必须管理传递给选择字段的实体。也许坚持 它们在实体管理器中?
我不完全确定我是否走在正确的轨道上。我只想给文章加标签!
谢谢
【问题讨论】:
标签: symfony doctrine-orm