【发布时间】:2013-03-27 23:04:48
【问题描述】:
我有一个主实体段,它有一对多的类别,而类别有一对多的项目,所以是 3 级树结构
class Segment
{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="segment")
* @ORM\JoinColumn(name="segment_id", referencedColumnName="id")
*/
protected $categories;
}
class Category
{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Segment")
* @ORM\JoinColumn(name="segment_id", referencedColumnName="id")
*/
protected $segment;
/**
* @ORM\OneToMany(targetEntity="Item", mappedBy="category")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $items;
}
class Item
{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
}
SQL 表
CREATE TABLE segment (
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
name VARCHAR(100) NOT NULL,
)
CREATE TABLE segment_category
(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
segment_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
FOREIGN KEY(segment_id) REFERENCES segment(id)
)
CREATE TABLE segment_item
(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
category_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
FOREIGN KEY(category_id) REFERENCES segment_category(id)
)
这是我的实体公司,它有来自细分市场的子细分市场
class Company
{
/**
* @ORM\Id
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Segment")
* -- What here to add? Is this correct ?--
* @ORM\JoinTable(name="company_segment_linker",
* joinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}
* )
*/
protected $segments;
}
公司 SQL 表确定哪个段(也包括类别和项目)属于公司。
CREATE TABLE company_segment_linker
(
company_id INT NOT NULL,
item_id INT NOT NULL,
FOREIGN KEY(company_id) REFERENCES company(id),
FOREIGN KEY(item_id) REFERENCES segment_item(id)
)
Segment数据结构示例(数字代表ID):
- seg1
- cat1
- 项目1
- 项目2
- 项目3
- cat2
- 项目4
- 项目5
- cat1
- seg2
- cat3
- 项目6
- cat4
- 项目7
- 项目8
- cat3
公司 com1 具有这样的子细分市场:
- seg1
- cat1
- 项目2
- 项目3
- cat2
- 项目5
- cat1
- seg2
- cat4
- 项目8
- cat4
所以我只会在 company_segment_linker 表中存储公司 fk_id 和项目 fk_ids
company_id | item_id
1 | 2
1 | 3
1 | 5
1 | 8
因为从项目表我可以参考类别和从类别表到段。
我的问题是,这在 Doctrine2 中是否有可能仅从项目外键创建子段,如果是,如何编写注释?还是我必须使用另一种方法来实现这一目标? 谢谢你的帮助。 PS:对不起我的英语:/
【问题讨论】:
标签: doctrine-orm tree-structure