连接表时PhalconPHP扫描错误

时间:2017-01-26 09:54:15

标签: php orm phalcon phalcon-orm

我尝试使用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。

研究问题主要是在查询中返回有关禁止的分号的结果(example1example2),但在我的情况下,这不是问题。

通过连接线注释,查询工作正常,因此问题必须在于它。任何帮助都是适用的。

2 个答案:

答案 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