CakePHP 3中的已连接查询无法检测到第一列的ID。我该如何解决这个问题?

问题描述:

我最近从XAMPP上传了一个项目到测试服务器,并立即开始运行环境中的一些差异。 我要对付的第一件事是这样的:CakePHP 3中的已连接查询无法检测到第一列的ID。我该如何解决这个问题?

柱未发现:在 'where子句'

$query = $this->find()->where(['users.id' => $Id])->hydrate(false)->join([ 
     'table' => 'userdata', 
     'alias' => 'u', 
     'type' => 'LEFT', 
     'conditions' => 'u.userID = users.id' 
     ])->autoFields(true) // selecting all fields from current table 
     ->select(["u.avatar", "u.birthday", "u.views", "u.bio", "u.lastIP"]);  

    return $query->toArray(); 

这XAMPP工作的罚款1054未知列 'users.id',但在Linux服务器上正在产生上述错误。

$this->find()

位于模型的用户,所以它最初侧重于表。

它是由连接直接引起的 - 没有它,users.id完美地工作。我相信一个解决方案是给users.id一个别名,但这可能不正确。

这怎么解决?

+0

根据CakePHP的公约,别名应该是骆驼帽子,即'用户',而不是'用户'。这就是说,当你遇到SQL错误时,请始终显示生成的SQL查询 - 谢谢! – ndm

+0

请问您可以做出这个答案吗?这确实是解决方案,我想接受它。 – Merlin

+0

考虑到在Xampp上使用的小写字母,我相信符号设置是不同的。 – Merlin

我不做CakePHP,但我做的是sql。我没有看到你在哪个地方加入了“用户”表。我只看到用户数据的包含和别名(别名为“u”)。但是没有“用户”表,除非这是你代码中的其他地方(即使对于那些了解蛋糕的人来说,这可能是很好的包括,因为这明显是错误说明的)。

除非蛋糕有望使对用户表的假设,这样看来,它不包含进来,直到我看到的证据,否则;)

感谢蛋糕介绍。

此外,您可能要打开mysql的日志记录,以验证蛋糕框架创建正确(即:查看完整的查询一次全部在MySQL日志)加入

+0

我为那些陌生的人添加了一点点。 CakePHP 3基本上是一个轻量级的MVC框架,它也封装了一些体面的安全和数据库结构 - 但是否则它可以让你创建你需要的东西。它也有一些有用的帮手。 – Merlin

+1

对于有问题的表格,查询位于表格的模型中 - 它在$ this - >() – Merlin

+0

中自动抓取它如前所述:在我看到演示“this”的代码之前,我不知道确保该字段存在。另外,你可能想打开mysql日志记录来验证Cake框架是否正确创建连接(即:在mysql日志中一次查看完整查询)。有了这个完整的查询,我可以告诉你哪里出了问题......但将它翻译成蛋糕就在你身上;) – TheSatinKnight