2015-04-24 2 views
0

У меня есть 2 объекта:Какое отношение symfony было бы наиболее подходящим?

A Package, and StockItem.

Пакет может иметь много Stockitems, а StockItem может принадлежать многим Пакетам, поэтому я предполагаю, что это отношения ManyToMany.

Но я не хочу, чтобы StockItems указывали на пакеты, потому что я предполагаю, что это повредит базу данных.

Так как будет много пакетов со многими другими StockItems.

Возможно ли иметь пакет с массивом StockItems, в то время как у запасника нет поля, указывающего на пакет?

ответ

1

A ManyToMany отношения действительно подходят. У вас не должно быть никаких проблем с этим, так как ManyToMany использует таблицу соединений, которая обрабатывает все внешние ключи, что означает, что ни одно из ваших сущностей фактически не будет иметь поле, указывающее на другое в базе данных. Взгляните на документации Доктрины в: 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); 

Как вы можете видеть, ManyToMany отношений получили созданные между User и Group, но только таблицей проведением внешних ключей это таблица соединений users_groups.

Теперь вам решать, что отношения должны быть однонаправленными или двунаправленными (Many-To-Many, Bidirectional). Вы даже можете выбрать сторону для использования в целях чтения кода (Owning and Inverse Side on a ManyToMany association)

Смежные вопросы