我正在使用cakePHP创建一个todo-application。 CakePHP为您创建查询等。这就是为什么必须没有拼写错误。
错误:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Projecttask.projecttasks_name' in 'field list'
查询:
SQL Query: SELECT `Itemrequirement`.`itemreq_id`, `Projecttask`.`projecttasks_name`
FROM `gtd`.`itemrequirements` AS `Itemrequirement`
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ON (`Itemrequirement`.`itemreqs_rel_projectparents` = `ProjecttaskParent`.`projecttasks_id`)
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild` ON (`Itemrequirement`.`itemreqs_rel_projectchilds` = `ProjecttaskChild`.`projecttasks_id`)
WHERE 1 = 1
ORDER BY `Itemrequirement`.`itemreq_id` asc LIMIT 10000
数据库:
我变得非常无能,因为我已经在phpmyadmin手动尝试了很多东西..
答案 0 :(得分:1)
您正在使用projecttasks
两次
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ...
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild` ...
但使用别名ProjecttaskParent
和ProjecttaskChild
,因此您必须使用别名而不是表名
`ProjecttaskParent`.`projecttasks_name`
或
`ProjecttaskChild`.`projecttasks_name`
您的查询应如下所示(例如ProjecttaskChild
别名)
SELECT `Itemrequirement`.`itemreq_id`, `ProjecttaskChild`.`projecttasks_name`
FROM `gtd`.`itemrequirements` AS `Itemrequirement`
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ON (`Itemrequirement`.`itemreqs_rel_projectparents` = `ProjecttaskParent`.`projecttasks_id`)
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild` ON (`Itemrequirement`.`itemreqs_rel_projectchilds` = `ProjecttaskChild`.`projecttasks_id`)
WHERE 1 = 1
ORDER BY `Itemrequirement`.`itemreq_id` asc LIMIT 10000
答案 1 :(得分:0)
您从数据库名称ProjectTask中选择并使用别名(ProjectTaskParent和ProjectTaskChild)
您的查询应该是:
SELECT `Itemrequirement`.`itemreq_id`, `ProjecttaskParent`.`projecttasks_name` FROM `gtd`.`itemrequirements` AS `Itemrequirement` LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ON (`Itemrequirement`.`itemreqs_rel_projectparents` = `ProjecttaskParent`.`projecttasks_id`) LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild` ON (`Itemrequirement`.`itemreqs_rel_projectchilds` = `ProjecttaskChild`.`projecttasks_id`) WHERE 1 = 1 ORDER BY `Itemrequirement`.`itemreq_id` asc LIMIT 10000
为Projecttask
。projecttasks_name
或ProjecttaskParent
更改projecttasks_name
。ProjecttaskChild
。projecttasks_name
答案 2 :(得分:0)
从错误消息:
'字段列表'中的未知列'Projecttask.projecttasks_name'
因此,有一个表/别名Projecttask
和一个字段projecttasks_name
。除查询外:
FROM `gtd`.`itemrequirements` AS `Itemrequirement`
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ...
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild` ...
表projecttasks
有两个不同的别名,即问题不在于表中不存在该字段,在该查询中没有表的名称/别名。
您想要的查询可能是:
SELECT
`Itemrequirement`.`itemreq_id`,
`ProjecttaskParent`.`projecttasks_name` # <- alias updated
FROM
`gtd`.`itemrequirements` AS `Itemrequirement`
LEFT JOIN
`gtd`.`projecttasks` AS `ProjecttaskParent` ON (...)
LEFT JOIN
`gtd`.`projecttasks` AS `ProjecttaskChild` ON (...)
WHERE
1 = 1
ORDER BY
`Itemrequirement`.`itemreq_id` asc
LIMIT 10000
未显示查询代码,因此您需要更改
$Itemrequirement->find('all', array(
'conditions' => array(
'Projecttask.projecttask_name' ...
到
$Itemrequirement->find('all', array(
'conditions' => array(
'ProjecttaskParent.projecttask_name' ...
或者使用escapeField确保别名正确
$Itemrequirement->find('all', array(
'conditions' => array(
$Itemrequirement->ProjecttaskParent->escapeField('projecttask_name') ...