У меня плохое предчувствие по поводу задачи, в которой подчиненные дочерние элементы должны получать физические родительские идентификаторы (внешние ключи) для супер родительского элемента.
Итак, вот текущая база данных / структура orm
masterparent-> child1-> child2-> child3-> child4-> child5-> ребенка6
всегда oneToMany
Так что это довольно длинная цепь. Давайте рассмотрим лучше читаемый пример в обратном порядке:
nail-> getFingerPart () -> getFinger () -> getHand () -> getHuman () (и предположим, что у каждого fingerPart может быть несколько гвоздей;))
Моя задача теперь состоит в том, чтобы добавить столбец human_id к «nails», «finger_parts» и «finger» (а не просто к «hand», имеющему его).
Основными причинами этого являются многочисленные соединения, чтобы получить все ногти от человека и так далее.
И "горячие клавиши" сущностей, такие как human-> getNails (), также выглядят довольно уродливо: foreach this-> getHands () как hand ... foreach hand-> getFingers () ...)
Хотя я не думаю, что это было бы большой проблемой производительности (это не высокопроизводительное приложение, где каждая мс имеет значение), но да, эти объединения раздражают, и 5-6 вложенных циклов не позволяют влюбиться в код.
Но я не знаю, это просто неправильно.
1.) Думаю, у вас возникнут проблемы с каскадным удалением в доктрине.
2.) Похоже, вы испортите структуру, так как больше не будет «источника правды» (палец говорит, что он принадлежит человеку 1, рука говорит, что он принадлежит человеку 2) - но в нашем В особом случае этого не произойдет, так как вы не сможете изменить «человека». Но если это становится обычным поведением, чтобы избежать присоединений, это, безусловно, будет.
3.) В нашем случае вы можете создавать новые руки, пальцы, ... где мы должны установить человека после этого изменения, поэтому нам нужно изменить довольно много кода (но я думаю, это не будет произвести впечатление на заинтересованного лица).
Есть ли здесь другие "конфликты", которые могут произойти?
Нет ли лучшего способа, как создать представление для этого?
А затем HumanView-> findAllBy (["human": 1]); получить все гвозди (но с «настоящими» записываемыми сущностями, а не только для чтения)?