2013-07-28 95 views
0

您好我有許多人項目(產品)和類別之間的許多關係,我實現用這三個實體:學說2多對多(產品 - 分類)

  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.Categories表

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

我知道這並沒有太大的感光度,但是我沒有任何其他的想法,所以請幫助我。如果你想設置的類別和項目之間的關聯的某些屬性

感謝

回答

1

一個第三實體纔有用。例如,項目「屬於」類別,項目被「建議」添加到類別中,項目從類別中「待處理」刪除。由於您的ItemCategories不顯示任何此類屬性,因此您最好按照手冊中的指定方式進行操作。在這裏閱讀更多關於它的信息:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

+0

什麼evolutivity? – goto

+3

它呢? – Flip

0

首先,您應該重命名ItemCategory的ItemCategory,因爲此項目的實例只是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);