ERD example http://i57.tinypic.com/zn367d.pngмодель Phalcon и атрибут таблицы с несколькими внешними ключами
Как вы можете видеть из этого ERD, я проектирования регистратор, что следить за действиями нескольких типов пользователей. Например, каждая запись в таблице logger.log будет иметь только одну связанную запись в одной из связанных журналов logger.relate. *.
Использование Phalcon модели как АВТОНОМНЫЙ, у меня есть 7 моделей, один для основной таблицы и 6 для таблиц отношений:
- Вход
- LogRelateCarrier
- ...
В классе модели журнала я использовал метод hasMany() для установки отношения 1-n; в других классах моделей я использовал метод belongsTo() для отношений n-1.
Мой вопрос: есть способ в Phalcon непосредственно обрабатывать сценарии как этот, так что я смог бы получить как ID записи журнала актера просто делать что-то вроде:
$log = Log::findFirst(1);
$id_actor = $log->getIdActor(); // Getter method for actor's ID
$actor_type = $log->getActorType(); // Getter method for actor's type (customer, carrier, etc.)
имеющий методы получения очень простые, что-то вроде (извините, я действительно новичок в этих рамках):
public function getIdActor() {
return $this->id_actor;
}
другими словами, я хотел бы знать, если есть способ в этом контексте для обработки такого сценария без вынуждены записывать себе другие подпрограммы. И, когда это возможно, с некоторой производительностью (поскольку я держу тип актера в классе logger.log, чтобы узнать, какую реляционную таблицу мне придется запрашивать, вместо того, чтобы запрашивать все реляционные таблицы, а затем вычислять только одну запись из единственная таблица, которая ее удерживает).
Наконец, я использовал так много реляционных таблиц, поскольку мне нужен слой данных (а не логический) для обеспечения ограничений между таблицей журналов и множеством внешних сторон разных участников.
Надеюсь, что я объяснил ситуацию, большое вам спасибо!
Я знал о связанных моделей. Моя «проблема» заключается в том, что каждый экземпляр основной модели будет иметь только один экземпляр одной из шести связанных моделей, основанный на условии, что таблица относительных отношений имеет или не имеет записи, связанной с записью основной таблицы. Вследствие этого я обработал ситуацию с помощью findFirst правильной связанной модели по атрибуту экземпляра главной модели «type_actor», избегая запуска других 5 findFirst в других связанных таблицах, которые из-за предварительных условий будут производить пустые результирующие объекты. Есть ли у Phalcon особый способ автоматически справиться с такой ситуацией. – user3418803
Все еще не уверен, что я правильно понял .. Давайте продолжаем пытаться :) Вы можете создать метод в лог-модели, который реализует переключатель actor_type и возвращает затем соответствующую модель, связанную через отношение. Надеюсь, что это поможет :) – Celoain
По вашему ответу вы получили сценарий. То, что вы объяснили, является фактическим решением, которое я реализовал. Он фактически выполняет два отдельных запроса: один для модели Log и другой для соответствующей связанной модели. Я мог бы получить одну и ту же дату с одним внешним запросом на соединение, но хотел бы знать, мог ли я сделать Phalcon такую операцию, оставаясь на таком концептуальном высоком уровне :) – user3418803