Как должно быть реализовано факультативное взаимно-однозначное отношение в Doctrine ORM и Symfony? Предположим, что в базе данных есть несколько папок. Каждая папка может иметь значок по умолчанию или некоторый пользовательский значок, представленный в другой таблице. Как это отношение должно быть описано в файле схемы? Как я могу сказать, что в случае данной папки папок происходит или не происходит?
Я сам должен догадаться, но каждый кажется не совсем удачным:
1) Допустим, я определяю таблицу folder_icon
со столбцом id
и столбцом folder_icon_id
в таблице folder
и связываю эти столбцы с помощью внешнего ключа. Если folder_icon_id
содержит NULL, связь не возникает. Если он содержит некоторое целочисленное значение, он указывает на значок соответствующей папки. Когда я реализую это таким образом и пытаюсь получить значок папки, используя что-то вроде $ folder-> getFolderIcon (), я получаю экземпляр класса FolderIcon с полями, равными нулю (где я предпочел бы получить что-то вроде NULL, FALSE или Doctrine_Null ). Почему это так? Как я должен проверить, не является ли возвращенный объект «настоящим» значком папки?
2) Давайте предположим, что я использую метод, аналогичный предыдущему, но я определяю первую строку таблицы folder_icon
как значок по умолчанию, так что каждая папка, в которой не выбран какой-либо пользовательский значок, связана с этой первой строкой. В этом случае нет проблем с получением некоторых фиктивных экземпляров класса FolderIcon. Но есть проблема, если пользовательский значок папки удаляется из базы данных, так как отсутствует поведение onDelete «SET 1» для связи любых папок с использованием удаленного значка со значком по умолчанию.
Как решить эту проблему? Как правильно определить этот тип отношений в файле схемы?