Ответ 1
Отношение является двунаправленным, если оба объекта содержат ссылку на другую.
Если вы опустите одну из этих ссылок, она будет однонаправленной.
Рассмотрим типичную схему "posts" и "tags". Как правило, вы реализуете двунаправленную связь:
<?php
class Post {
// ...
/**
* @ManyToMany(targetEntity="Tag",inversedBy="posts")
*/
protected $tags;
// ...
}
class Tag {
// ...
/**
* @ManyToMany(targetEntity="Post",mappedBy="tags")
*/
protected $posts
// ...
}
Теперь представьте, что вы решили, что вам никогда (или редко) не нужно отвечать на такие вопросы, как "Какие сообщения имеют тег" foo "?". Вы можете опустить ассоциацию $posts в свой тег Tag, преобразовать ее в однонаправленную связь и снять некоторую нагрузку с ORM.
Вы все еще можете ответить на этот вопрос, но вам нужно написать код, чтобы сделать это.
На самом деле, это, вероятно, хороший способ пойти в сценариях Posts/Tags, так как вы обычно не добавляете/не удаляете сообщения из тегов. Как правило, вы добавляете/удаляете теги только из сообщений. Вы всегда будете переходить от тегов к сообщениям при поиске "всех сообщений с тегом" x ", которые могут быть тривиально реализованы в каком-либо классе обслуживания.