- 更新日: 2016年3月12日
- PHP & CakePHP
Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
CakePHP 3 のアプリケーションで表題のエラーが発生しました。関連テーブルのデータを contain で取得しつつ、条件で絞り込みを行った時に生じました。エラーメッセージの詳細は下記の通りです。
1 2 3 |
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created' in order clause is ambiguous |
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
User has many Posts / Post belongs to User のアソシエーションがある関連テーブルの場合です。
エラーが発生したコード
Users の関連テーブルである Posts テーブルを一緒に取得して、Posts テーブルの created カラムの降順(新しい順)でソートさせようとしました。最初に書いてたコードが以下のとおり。
src/Controller/HomeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Controller; use Cake\ORM\TableRegistry; class HomeController extends AppController { public function index() { $posts_table = TableRegistry::get('Posts'); $posts = $posts_table ->find() ->contain(['Users']) ->order(['created' => 'DESC']); $this->set('posts', $posts); } } |
このコードだとエラーが発生した。
改善して解決したコード
1 2 3 |
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created' in order clause is ambiguous |
訳)order 句の ‘created’ カラムが曖昧ですよ。
というエラーメッセージなので、つまり created カラムは Posts テーブルにも Users テーブルにも存在するので、どちらの created カラムを指しているのかが分からない、という意味でしょう。
なので以下のように、order 句で Posts.created とテーブル名を付けてカラム名を指定しました。
src/Controller/HomeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Controller; use Cake\ORM\TableRegistry; class HomeController extends AppController { public function index() { $posts_table = TableRegistry::get('Posts'); $posts = $posts_table ->find() ->contain(['Users']) ->order(['Posts.created' => 'DESC']); $this->set('posts', $posts); } } |
これで解決できて、目的通り Posts テーブルの created カラムの降順でソートした結果を取得できました。
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
- CakePHPで全てのモデル/テーブル名一覧を取得
Leave Your Message!