Есть ли в Phalcon встроенный способ управления полиморфными ассоциациями — через поведение или изначально — кроме ручной обработки?
Спасибо!
Полиморфные ассоциации обычно неправильно понимают, потому что есть много способов использовать этот антипаттерн.
Тем не менее, если я правильно понял, вы хотите модель, которая имеет ценность, которая может относиться к тому или иному типу модели, верно ?!
Теоретически это возможно, так что не стесняйтесь попробовать и скажите мне, если вам это удастся …
Что ж, как я уже говорил, есть много способов добиться этого с Phalcon, и один из них, который я могу себе представить, заключается в следующем:
MainModel
Конечно, должен иметь два столбца (то есть «assoc_id», «assoc_type»). Затем вы устанавливаете в Phalcon одно отношение к специальной модели, в этом примере AssocModel
,
AssocModel
не имеет реальной таблицы, но имеет метод getSource
переопределяет и возвращает имя соответствующей таблицы на основе «тип_ассоции».
Если эти ассоциированные модели имеют общий набор столбцов, вы можете создать интерфейс IAssociable
или что-то в этом роде, так что вы можете сохранить согласованность определений ваших ассоциируемых моделей.
Однако, если вам действительно нужна фактическая модель для получения некоторых эксклюзивных данных из такого рода ассоциации, к сожалению, для извлечения оставшихся столбцов / свойств потребуется второй экземпляр модели. Для этого так же, как getSource
возвращает правильное имя таблицы, вы можете создать другой метод для создания экземпляра правильного класса модели с соответствующим идентификатором.
Не уверен, что это сильно поможет, но поделитесь со мной каким-либо прогрессом в этом, чтобы я мог пойти дальше в этом …
Вы можете использовать мою библиотеку для этого. но будь осторожен. эта библиотека находится в разработке, и стабильный выпуск появится, как только я протестирую ее в реальном проекте: https://github.com/IVIR3zaM/PhalconModelMiddleware