0

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

我使用的语法来自这个 Stackoverflow 条目(当然,这不是最新的帖子,但我仍在使用 Phalcon 2.0.13。

研究这个问题主要返回关于查询中禁止的半列的结果(example1example2),但这不是我的问题。

注释了连接行后,查询工作正常,所以问题一定出在它上面。任何帮助都会受到重视。

4

2 回答 2

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假设您已正确声明模型,应该可以解决您的问题。

于 2017-01-30T08:28:32.867 回答
-1

它应该是\Render\Model\Branches你也应该使用模型关系别名,这样你就可以做类似的事情:

$modelsManager->registerNamespaceAlias('M', 'Render\Model');

然后就使用M:Branches

于 2017-01-26T10:33:21.433 回答