Я пытаюсь объединить две таблицы в службе, используя метод query () объекта Phalcon \ Mvc \ Model. Вот мой код:
$result = $this->templateModel->query()
->columns('\Render\Model\Templates.* ')
->leftJoin('\Render\Model\Branches.*', '\Render\Model\Templates.branchId = b.Branches.id', 'b')
->where("branchId = :branchId:")
->bind(['branchId' => $this->branchData['id']])
->execute()
->toArray();
Однако при загрузке страницы я получаю следующую ошибку:
Phalcon\Mvc\Model\Exception: Scanning error before '\Render\Model\Br...' when parsing: SELECT \Render\Model\Templates.* FROM [Render\Model\Templates] LEFT JOIN [\Render\Model\Branches.*] AS [b] ON \Render\Model\Templates.branchId = b.Branches.id WHERE branchId = :branchId: (187) in /home/vis/projects/stm/app/Service/BranchService.php on line 61
Синтаксис, который я использовал, исходит из эта запись Stackoverflow (конечно, это не самый новый пост, но я все еще использую Phalcon 2.0.13.
Исследование проблемы в основном возвращает результаты о запрещенных точках с запятой в запросе (example1, example2), но это не проблема в моем случае.
С прокомментированной строкой соединения запрос работает нормально, поэтому проблема должна заключаться в этом. Любая помощь оценивается.
SELECT \Render\Model\Templates.*
FROM [Render\Model\Templates]
LEFT JOIN [\Render\Model\Branches.*] AS [b] ON \Render\Model\Templates.branchId = b.Branches.id
WHERE branchId = :branchId:
Я предполагаю, что вы немного знаете SQL. Даже если это PhQL, вы, вероятно, видите часть LEFT JOIN [\Render\Model\Branches.*]
, что выглядит довольно подозрительно. Невозможно объединить таблицу в столбец в этой декларации. Соединения происходят между двумя таблицами всегда.
Простое исправление:
// -------------------------------v (removed ".*")
->leftJoin('\Render\Model\Branches', '\Render\Model\Templates.branchId = b.Branches.id', 'b')
должен исправить вашу проблему, если вы правильно заявили \Render\Model\Branches
модель.
Так должно быть \Render\Model\Branches
Также вы должны использовать псевдоним отношения модели, чтобы вы могли сделать что-то вроде:
$modelsManager->registerNamespaceAlias('M', 'Render\Model');
А потом просто использовать M:Branches
так далее