0

簡単な質問があります。Post と Category という 2 つのテーブルが多対多の関係にあり、そのままの形式の PostType 形式の CategoryType のコレクションですが、ここから問題が始まります。

クックブックコレクションフォームの指示に従ってデータを永続化しましたが、目的の結果が得られません..コードは次のとおりです。

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'
        ))

問題は、単純な関係 Post-Category を作成する代わりに、新しいフィールド Category を挿入することです。どこが間違っているのかわかりません..

4

1 に答える 1

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,
        ));

投稿作成フォームには、カテゴリのチェックボックスがあります。複数選択フィールドが必要な場合は、falseで展開された変更

于 2013-03-14T12:09:42.987 に答える