Как определить, является ли отношение таблицы двунаправленным или однонаправленным в Доктрине 2?
Я нахожусь в процессе обновления с Доктрины 1.1.4 до Доктрины 2.0.6 в своем приложении Zend.
В настоящее время я работаю над отображением связей между сущностями. В документации Доктрины 2 говорится: "Отношения могут быть двунаправленными или однонаправленными. Я в замешательстве относительно того, что означают эти термины в данном контексте.
Как определить, является ли связь однонаправленной или двунаправленной?
Ценю вашу помощь.
2 answers
Связь является двунаправленной, если обе сущности содержат ссылку на другую.
Если вы опустите одну из этих ссылок, она будет однонаправленной.
Рассмотрим типичную схему "сообщения" и "теги". Как правило, вы реализуете двунаправленную ассоциацию:
<?php
class Post {
// ...
/**
* @ManyToMany(targetEntity="Tag",inversedBy="posts")
*/
protected $tags;
// ...
}
class Tag {
// ...
/**
* @ManyToMany(targetEntity="Post",mappedBy="tags")
*/
protected $posts
// ...
}
Теперь представьте, что вы решили, что вам никогда (или редко) не нужно отвечать на такие вопросы, как "У каких сообщений есть тег "foo"?". Вы можете опустить ассоциацию $posts в своей сущности тега, преобразовав ее в однонаправленную ассоциации и снять некоторую нагрузку с ORM.
Вы все еще могли бы ответить на такой вопрос, но для этого вам пришлось бы написать код.
На самом деле, это, вероятно, хороший способ использовать сценарий сообщений/тегов, так как обычно вы не добавляете/удаляете сообщения из тегов. Как правило, вы добавляете/удаляете теги только из сообщений. Вы можете переходить от тегов к сообщениям только в том случае, если ищете "все сообщения с тегом "x"", что может быть тривиально реализовано в каком-либо классе обслуживания.
То же, что и ответ тимдева,
Однонаправленный и двунаправленный - это просто концепции ORM, они не имеют ничего общего с базой данных, Предположим, у вас есть отношение OneToMany -
У пользователя есть блоги
Таким образом, вы можете добавить это в свою пользовательскую сущность как Свойство OneToMany
Но очевидно, что существует Множество Отношений
В Блогах Есть Пользователь
Таким образом, вам необязательно создавать отношение ManyToOne в вашей сущности блога, если вы хотите получить доступ к пользователю из сущности блога, затем добавьте это свойство, если вы не хотите, то не добавляйте, в этом нет необходимости. в обоих случаях (вы добавляете двунаправленную ссылку или нет) ORM будет поддерживать одну и ту же структуру базы данных (в таблице блога будет столбец user_id).