2

CakePHP を使用して todo アプリケーションを作成しています。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で手動でたくさんのことを試したので、私はかなり無知になりつつあります..

4

3 に答える 3

1

projecttasks2回使用しています

LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskParent` ...
LEFT JOIN `gtd`.`projecttasks` AS `ProjecttaskChild`  ...

ただし、エイリアスProjecttaskParentProjecttaskChildがあるため、テーブル名の代わりにエイリアスを使用する必要があります

`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
于 2013-09-19T10:29:06.623 に答える
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には 2 つの異なるエイリアスがあります。つまり、問題はフィールドがテーブルに存在しないことではなく、クエリにその名前/エイリアスを持つテーブルがないことです。

おそらく必要なクエリは次のとおりです。

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

PHPコード?

クエリのコードは表示されていませんが、変更する必要があります

$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') ...
于 2013-09-19T10:33:09.720 に答える
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のためにProjecttaskParentprojecttasks_nameまたはProjecttaskChildprojecttasks_name

于 2013-09-19T10:30:46.860 に答える