【问题标题】:doctrine 2 many to many (Products - Categories)学说 2 多对多(产品 - 类别)
【发布时间】:2013-07-28 14:20:38
【问题描述】:

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

  1. 物品实体:

       /**
     * @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)

         /**
         * @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 
         */
    
    
    
    }
    

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

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

我知道这没有多大意义,但我没有其他想法,所以请帮帮我。

谢谢

【问题讨论】:

    标签: php orm doctrine-orm


    【解决方案1】:

    第三个实体仅在您想设置类别和项目之间的关系的某些属性时才有用。例如,项目“属于”类别,项目“建议”添加到类别,项目“待”从类别中删除。由于您的 ItemCategories 没有显示任何此类属性,因此您最好按照手册指定的方式进行操作。在此处阅读更多信息:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

    【讨论】:

    • 进化论呢?
    【解决方案2】:

    首先,您应该通过 ItemCategory 重命名 ItemCategories,因为此项目的实例只是 1 个项目和 1 个类别之间的链接。

    那么就很简单了:

    $item = new Item();
    $em->persist($item);
    $category = $em->getRepository('category')->find($id_category);
    
    $itemCategory =new ItemCategory();
    $itemCategory->setItem($item);
    $itemCategory->setCategory($category);
    
    $em->persist($itemCategory);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多