1

次のエラーが表示されます。

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges O' at line 1

このエラーが発生している SQL クエリは次のとおりです。

SELECT Colleges.* AS `Colleges__*` FROM college_admins CollegeAdmins LEFT JOIN colleges Colleges ON Colleges.id = (CollegeAdmins.college_id) WHERE CollegeAdmins.user_id = :c0 LIMIT 20 OFFSET 0

quoteIdentifiers config\app を有効にしましたが、次の新しいエラーが発生します。

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Col' at line 1

クエリは次のようになります。

SELECT `Colleges`.* AS `Colleges__*` FROM `college_admins` `CollegeAdmins` LEFT JOIN `colleges` `Colleges` ON `Colleges`.`id` = (`CollegeAdmins`.`college_id`) WHERE `CollegeAdmins`.`user_id` = :c0 LIMIT 20 OFFSET 0

「大学のコル」をキーワード「COL」に取っていると思いますが、よくわかりません。これを修正する方法は?

これは、MySQL クエリを生成する CakePHP コードです。

return $college_admins->find()
    ->select(['Colleges.*'])
    ->leftJoinWith('Colleges')
    ->where(['CollegeAdmins.user_id' => $userId]);
4

2 に答える 2

1

Colleges.*CakePHP ORM クエリ (CakePHP 3.x) では使用できません。あなたが発見したように、これは のような間違った SQL エイリアスを作成しますColleges__*。テーブルのすべての列を選択する代わりに、テーブル オブジェクトを渡す必要があります。

したがって、おそらく次のようなことをしたいと思うでしょう:-

->select($college_admins->Colleges)

Collegesがテーブルに関連付けられていると仮定しますCollegeAdmins

于 2016-02-10T16:34:55.747 に答える
0

これは colleges テーブル内のすべての列を参照し、エイリアスは単一の列 (またはテーブルまたはサブクエリ) を参照するため、colleges.* にエイリアスを設定することはできません。colleges テーブル内のすべてのフィールドを一覧表示し、それぞれに次のようなエイリアスを提供する必要があります。

select colleges.ig as colleges_id, colleges.field1 as colleges_field1, ...

そのような方法でエイリアスを提供するための構文はSQLにありません。あなたがしようとしているのは、php で mysql によって返されたメタデータにアクセスして、各フィールドのテーブル名を取得することです。

于 2016-02-10T15:02:34.753 に答える