Phalcon: Полиморфная Ассоциация

Есть ли в Phalcon встроенный способ управления полиморфными ассоциациями — через поведение или изначально — кроме ручной обработки?

Спасибо!

4

Решение

Полиморфные ассоциации обычно неправильно понимают, потому что есть много способов использовать этот антипаттерн.

Тем не менее, если я правильно понял, вы хотите модель, которая имеет ценность, которая может относиться к тому или иному типу модели, верно ?!

Теоретически это возможно, так что не стесняйтесь попробовать и скажите мне, если вам это удастся …

Что ж, как я уже говорил, есть много способов добиться этого с Phalcon, и один из них, который я могу себе представить, заключается в следующем:

MainModel Конечно, должен иметь два столбца (то есть «assoc_id», «assoc_type»). Затем вы устанавливаете в Phalcon одно отношение к специальной модели, в этом примере AssocModel,

AssocModel не имеет реальной таблицы, но имеет метод getSource переопределяет и возвращает имя соответствующей таблицы на основе «тип_ассоции».

Если эти ассоциированные модели имеют общий набор столбцов, вы можете создать интерфейс IAssociable или что-то в этом роде, так что вы можете сохранить согласованность определений ваших ассоциируемых моделей.

Однако, если вам действительно нужна фактическая модель для получения некоторых эксклюзивных данных из такого рода ассоциации, к сожалению, для извлечения оставшихся столбцов / свойств потребуется второй экземпляр модели. Для этого так же, как getSource возвращает правильное имя таблицы, вы можете создать другой метод для создания экземпляра правильного класса модели с соответствующим идентификатором.

Не уверен, что это сильно поможет, но поделитесь со мной каким-либо прогрессом в этом, чтобы я мог пойти дальше в этом …

1

Другие решения

Вы можете использовать мою библиотеку для этого. но будь осторожен. эта библиотека находится в разработке, и стабильный выпуск появится, как только я протестирую ее в реальном проекте: https://github.com/IVIR3zaM/PhalconModelMiddleware

1

По вопросам рекламы [email protected]