我有一个具有一对多类别的主要实体段,并且类别具有一对多项目,所以 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):
- 段1
- 猫1
- 项目1
- 项目2
- 第 3 项
- 猫2
- 第 4 项
- 项目5
- 猫1
- 段2
- 三类
- 第 6 项
- 第四类
- 第 7 项
- 第8项
- 三类
公司 com1 的子部门如下:
- 段1
- 猫1
- 项目2
- 第 3 项
- 猫2
- 项目5
- 猫1
- 段2
- 第四类
- 第8项
- 第四类
所以我只会在 company_segment_linker 表
company_id |中存储公司 fk_id 和项目 fk_ids item_id
1 | 2
1 | 3
1 | 5
1 | 8
因为从项目表我可以参考类别和从类别表到段。
我的问题是,这在 Doctrine2 中是否有可能仅从项目外键创建子段,如果是,如何编写注释?还是我必须使用另一种方法来实现这一目标?谢谢你的帮助。PS:对不起我的英语:/