У меня есть модель, назовите ее Робот, который имеет несколько отношений manyToMany с другими моделями - Part, Country и Permision. Модели отношений - это RobotsParts, RobotsCountries и RobotsPermissions.PhalconPHP - получить конкретный объект с несколькими отношениями
Каждый робот может иметь несколько или без частей, стран и разрешений, связанных с ними.
Чтобы получить все роботы с определенной частью, PhalconPHP упрощает задачу. (алиасы правильно устанавливаются в моделях, конечно).
$part = Part::findFirstByName("arm");
$robotsWithPart = $part->robots;
То же самое относится и к роботам с той или иной страной:
$country = Country::findFirstByCode("HR");
$robotsWithCountry = $country->robots;
Но как можно получить только робот с определенной частью, страной и разрешения?
У меня были тщетные попытки, как:
$country = Country::findFirstByCode("HR");
$part = Part::findFirstByName("arm");
$robots = $country->getRobots([
'conditions' => "(partId = :pid:)",
'bind' => [
'pid' => $part->id
]
]);
Но, конечно же, PartID не признается, что не принадлежит ни к одной из выбранных моделей;
Параметры, которые принимают функции GetRelated ('Robot', [params]), являются только столбцами в модели Robot. Остальное выдает ошибку «Phalcon \ Mvc \ Model \ Exception: Column« partId »не относится ни к одной из выбранных моделей». – Vorta
@ Ворта, ага, звучит так, что это было бы невозможно. Вам придется использовать пользовательский запрос. Проверьте мой обновленный ответ, это может помочь вам начать работу! – Timothy
Пользовательский запрос. Однако небольшая поправка для вышеперечисленного: '$ result = Robot :: query()'. Все остальное остается прежним. Я тестировал решение и получаю ожидаемые результаты. Не самая красивая вещь, но выполняет свою работу. Спасибо! – Vorta