1

これは、カテゴリを作成しているときにコードが正常に機能し、サブカテゴリを作成するとエラーが発生するコードです。

エンティティ ファイル:

  /**
     * Music\Bundles\Core\Entity\MusicCategory
     * @ORM\Table(name="ms_musiccategory")
     * @ORM\Entity()
     * @ORM\Entity(repositoryClass="Music\Bundles\Core\Entity\Repository\CategoryRepository")
    * @UniqueEntity(fields={"name"},message="The name is already in this system.")
  */
    class MusicCategory 
   {
/**
     * @ORM\Column(name="id",type="integer")
     * @ORM\Id()
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

    /**
     *@ORM\ManyToOne(targetEntity="MusicCategory")
    *@ORM\JoinColumn(name="parent_Id", referencedColumnName="id")
     * 
     */
    private $parentid;

フォームビルダーで:

public function buildForm(FormBuilder $builder, array $options)
{
   $builder
        ->add('name')
        ->add('description')
        ->add('parentid', 'entity', array('class'=>'MusicCoreBundle:MusicCategory',
            'property'  => 'name',
            'required'  => false,
            'query_builder' => function(EntityRepository $er) {return $er->createQueryBuilder('s')->orderBy('s.name', 'ASC');},
            'empty_value' => 'No category'

            ));
}
4

3 に答える 3

2

エンティティ ファイルに変更します。

   /**
     * @ORM\Column(name="id",type="integer")
     * @ORM\Id()
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

    /**
      * @ORM\OneToMany(targetEntity="MusicCategory", mappedBy="parent")
     */
    protected $children;

   /**
     * @ORM\ManyToOne(targetEntity="MusicCategory", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
    */
    protected $parent;

    public function __construct()
{
         $this->parentId = null; // Default value for column parent_id
         $this->children = new \Doctrine\Common\Collections\ArrayCollection();
}

formbuilder にも変更します。

    ->add('parentid', 'entity', array('class'=>'MusicCoreBundle:MusicCategory',
            'property'  => 'name',
            'required'  => false,
             'query_builder' => function(EntityRepository $er) {return $er->createQueryBuilder('s')->orderBy('s.name', 'ASC');},//->where('s.parentid is NULL')
            'empty_value' => 'No category',
            ));

このコードを使用してください。お気軽にお楽しみください。:)

于 2012-12-12T07:00:52.960 に答える
1

あなたはおそらく次のようなことをしています
$category->setParent($parentId);

どこでやるべきか
$category->setParent($parent);

ここで$parentはタイプ 'MusicCategory' のオブジェクトです
Doctrine は ID ではなくエンティティで動作します

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.htmlもご覧ください。

主に自己参照関連に関する部分です。

于 2012-12-11T07:15:58.550 に答える
0

アソシエーションマッピングの問題だと思います...アソシエーションを確認する必要があります...

于 2012-12-11T07:10:13.160 に答える