2013-03-08 66 views
0

我有一个简单的问题, 我有关系,多对多,邮政和类别, 两个表以完整形式PostType形式CategoryType的集合,但这里的问题开始。 。Symfony2的简单多到许多问题

我跟着食谱收集表格上的说明持久化数据,我只是没有得到想要的结果.. 下面的代码:

class Post 
{ 
/** 
* 
* @ORM\ManyToMany(targetEntity="Categories", inversedBy="posts", cascade={"persist", "remove"}) 
* @ORM\JoinTable(name="AnCat", 
* joinColumns={ 
*  @ORM\JoinColumn(name="post_id", referencedColumnName="id") 
* }, 
* inverseJoinColumns={ 
*  @ORM\JoinColumn(name="categories_id", referencedColumnName="id") 
* } 
*) 
**/ 
protected $categories; 

public function __construct() 
{ 
    $this->categories = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

public function addCategory($categories) 
{ 
    foreach ($categories as $category) { 
     $category->addPosts($this); 
    } 
    $this->categories[] = $categories; 
} 

class Categories 
{ 
/** 
* 
* @ORM\ManyToMany(targetEntity="Post", mappedBy="categories") 
*/ 
protected $posts; 

public function __construct() 
{ 
    $this->posts = new ArrayCollection(); 
} 

/** 
* 
* @param Post $post 
* @return Categories 
*/ 
public function addPosts(Post $posts) 
{ 
    // I tried it but I get the same result! 
    /*if (!$this->posts->contains($posts)) { 
     $this->posts->add($posts); 
    }*/ 

    $posts->addCategory($this); 
    $this->posts[] = $posts; 
} 

class PostType extends AbstractType 
{ 

->add('Categories', 'collection', array('type' => new CategoriesType(), 
       'allow_add' => true, 
       'allow_delete' => true, 
       'prototype' => true, 
       'prototype_name' => '__categ__', 
       'by_reference' => false 
      )) 

class CategoriesType extends AbstractType 
{ 
    ->add('category', 'entity', array(
      'attr' => array('class' => 'cat'), 
      'class' => 'MyBusinessBundle:Categories', 
      'property' => 'category', 
      'label' => 'Categories' 
     )) 

的问题是,插入一个新的领域范畴,而不是创建一个简单的关系后分类。 我不明白的地方,我错了..

+0

它插入了什么? – Hast 2013-03-08 11:11:44

+0

从何种意义上说? 你能更具体吗? 我似乎没有错过信息... – Lughino 2013-03-08 21:48:03

回答

1

在你postType,改变集合类型为实体型

class PostType extends AbstractType 
    { 
    $builder->add('Categories', 'entity', 
     array('label' => 'Categories', 
      'required' => false, 
      'expanded' => true, 
      'class' => 'xxx\xxxBundle\Entity\Categories', 
      'property' => 'title', 
      'multiple' => true, 
     )); 

在您的创作形式后,您将有类别的复选框。如果你想要一个多选字段,将其改为假扩展

+0

谢谢,但主要的问题是,我需要一个集合,因为在这个例子中没有做出,类别是一对多的链接与子类别和在CategoriesType中有字段字段实体子类别的类别。 – Lughino 2013-03-14 19:59:42

+0

Perhap的数据模型不是非常“干净”......您需要创建一个“连接表”实体调用(postCategory),其中包含oneToMay关系和其他oneToMay关系,包括posts,subcat,type,...之后,您可以创建一个包含所有字段的集合。 – Clotaire 2013-03-15 14:22:38