您好我在项目(产品)和类别之间有多对多关系,我使用这三个实体实现了:
项目实体:
/**
* @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
*/
}
现在我的问题是我不知道如何使用EXISTING类别插入项目。 我试过了:
$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);
我知道它并没有多大意义,但我没有其他想法,所以请帮助我。
由于
答案 0 :(得分:1)
第3个实体仅在您想要设置Category和Item之间的Relation的某些属性时才有用。例如,项目“属于”类别,项目是“建议”添加到类别,项目是“待定”从类别删除。由于您的ItemCategories没有显示任何此类属性,因此您最好按手册指定的方式执行此操作。在此处阅读更多相关信息:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional
答案 1 :(得分:0)
首先,您应该按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);