原则2多对多(产品分类) [英] doctrine 2 many to many (Products - Categories)

查看:93
本文介绍了原则2多对多(产品分类)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个关系项目(产品)和类别,我实现使用这三个实体:

Hi I have a many to many relation between Items(Products) and categories and I implemented using these three entities:


  1. 项目实体:

  1. Item Entity:

   /**
 * @Entity 
 * @Table(name="items")
 */
use Doctrine\Common\Collections\ArrayCollection;

class Item {

    /**
     *
     * @Id  @Column(type="integer")
     * @GeneratedValue
     */
    private $id_item;

     /** @OneToMany(targetEntity="ItemCategories", mappedBy="item") */
    protected $categories;

    public function __construct() {

        $this->categories=new ArrayCollection();
    }

    public function addCategory(ItemCategories $category){
        $this->categories->add($category);
    }
    public function getCategories(){
        return $this->categories;
    }

}

2加入表(ItemCategories)

2 Join Table (ItemCategories)

     /**
     * @Entity 
     * @Table(name="item_categories")
     */
    class ItemCategories {

        /**
         *
         * @Id  @Column(type="integer")
         * @GeneratedValue
         */
        private $id;

        /**
         * @Column(type="integer")
         */
        private $id_item;

        /**
         * @Column(type="integer")
         */
        private $id_category;

        /** @ManyToOne(targetEntity="Category", inversedBy="ItemCategories")
         *  @JoinColumn(name="id_category", referencedColumnName="id_category")
         *  */
        protected $category;

        /** @ManyToOne(targetEntity="Item", inversedBy="$categories")
          *  @JoinColumn(name="id_item", referencedColumnName="id_item")
         *  */
        protected $item;

        public function getCategory() {
            return $this->category;
        }

        public function setCategory($category) {
            $this->category = $category;
        }

        public function getItem() {
            return $this->item;
        }

        public function setItem($item) {
            $this->item = $item;
        }



    }

3.类别表

 /**
 * @Entity 
 * @Table(name="categories")
 */
class Category {

    /**
     *
     * @Id  @Column(type="integer")
     * @GeneratedValue
     */
    private $id_category;

    /** @OneToMany(targetEntity="ItemCategories", mappedBy="category") */
    protected $ItemCategories;
    /**
     *
     * @Column(type="string") @var string 
     */



}


现在我的问题是我不知道如何使用EXISTING类别插入项目。
我试过:

Now my problem is that i don't know how to insert an item using EXISTING categories. I tried:

  $item= new Entity\Item();
  $itemCategoriesReferences=new Entity\ItemCategories();

   $productCategoriesReferences->setItem($product);

  //get existing category from db using PkId
   $itemCategoriesReferences->setCategory($CategoryModel->getCategory(1));
   $item->addCategory(itemCategoriesReferences);

我知道它没有太多的感觉,但我没有任何其他的想法,所以请帮助我。

I know that it does not make much sens but I don't have any another idea, so please help me out.

谢谢

推荐答案

如果要设置类别和项目之间的关系的某些属性,则很有用。例如项目属于类别,项目是建议添加到类别,项目是从类别中删除待定。由于您的ItemCategories不显示任何这样的属性,您最好按照手册指定的方式进行操作。在这里阅读更多信息: http ://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

A 3rd entity is only useful if you want to set some properties of the Relation between Category and Item. For example Item "belongs" to Category, item is "suggested" to be added to category, item is "pending" deletion from category. Since your ItemCategories doesn't show any of such properties you are really best of doing it the way the manual specifies. Read more about it here: http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

这篇关于原则2多对多(产品分类)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆