什么样的symfony关系最合适?

时间:2015-04-24 15:08:29

标签: symfony doctrine

我有两个实体:

一个包和一个StockItem。

一个包可以有很多Stockitems,一个StockItem可以属于很多包,所以我认为这是一个ManyToMany关系。

但我不希望StockItems指向Packages,因为我认为这会使数据库膨胀。

因为会有很多包含更多StockItems的包。

是否可以让Package具有StockItem数组,而stockitem没有指向包的字段?

1 个答案:

答案 0 :(得分:1)

ManyToMany关系确实合适。你应该没有遇到任何麻烦,因为ManyToMany使用一个处理所有外键的连接表,这意味着你的实体都不会在数据库中实际指向另一个实体。 看一下Doctrine的文档:Many-To-Many, Unidirectional

检查示例中生成的SQL查询:

CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE users_groups (
    user_id INT NOT NULL,
    group_id INT NOT NULL,
    PRIMARY KEY(user_id, group_id)
) ENGINE = InnoDB;
CREATE TABLE Group (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id);

如您所见,ManyToManyUser之间创建了Group关系,但持有外键的唯一表是联接表users_groups

现在由您来决定关系应该是单向还是双向(Many-To-Many, Bidirectional)。您甚至可以在关系中选择拥有方以实现代码可读性(Owning and Inverse Side on a ManyToMany association