我尝试使用Phalcon \ Mvc \ Model对象的query()方法连接服务中的两个表。这是我的代码:
$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
我使用的语法来自this Stackoverflow entry(已授予,它不是最新的帖子,但我还在使用Phalcon 2.0.13。
研究问题主要是在查询中返回有关禁止的分号的结果(example1,example2),但在我的情况下,这不是问题。
通过连接线注释,查询工作正常,因此问题必须在于它。任何帮助都是适用的。
答案 0 :(得分:0)
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
模型。
答案 1 :(得分:-1)
它应该是\Render\Model\Branches
你也应该使用模型关系别名,这样你就可以这样做:
$modelsManager->registerNamespaceAlias('M', 'Render\Model');
然后只使用M:Branches
等