Убери все, что есть в твоей голове о Owning side
и Inversed side
. Это не что иное, как некоторые понятия, которые помогают Doctrine объединить данные в родственные модели .
Прочитайте следующую цитату из Doctrine do c. Это может несколько помочь понять концепцию Owning side
и Inversed side
.
«Сторона владения» и «обратная сторона» - это технические концепции технологии ORM, а не концепции модели вашего домена. То, что вы рассматриваете как сторону-владельца в вашей доменной модели, может отличаться от того, что является стороной-владельцем для Doctrine. Они не связаны между собой.
Другая цитата из Doctrine do c:
Doctrine будет проверять только сторону-владельца ассоциации на предмет изменений.
Это означает, что владельцем является ассоциация с таблицей, содержащей внешний ключ . Поэтому таблица, содержащая внешний ключ, будет считаться doctrine только для изменений.
Еще раз из Doctrine do c:
- OneToOne - Один экземпляр текущего объекта ссылается на один экземпляр указанного объекта .
- Сторона-владелец ассоциации OneToOne - это объект с таблицей, содержащей внешний ключ
Здесь один экземпляр Компания относится к одному экземпляру упомянутой сущности Клиент или наоборот.
Когда мы говорим о OneToOne ассоциация, как ваш пример выше, сторона-владелец будет сущностью с таблицей, содержащей внешний ключ, поэтому Customer сущность.
В вашем примере , Doctrine создаст таблицы, подобные приведенным ниже:
CREATE TABLE Company (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE Customer (
id INT AUTO_INCREMENT NOT NULL,
company_id INT DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE Customer ADD FOREIGN KEY (company_id) REFERENCES Company(id);
Теперь, если вы хотите получить данные для клиента, связанного с компанией, запрос будет:
SELECT Company.id AS CompanyID, Customer.id AS CustomerID
FROM Company
LEFT JOIN Customer ON Company.id = Customer.company.id;
возвращенный результат от этого типа запроса будет быть гидратированным в обеих моделях Doctrine.