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