Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP

スポンサーリンク

CakePHP 3 のアプリケーションで表題のエラーが発生しました。関連テーブルのデータを contain で取得しつつ、条件で絞り込みを行った時に生じました。エラーメッセージの詳細は下記の通りです。

— 環境 —
PHP 5.5.19
CakePHP 3.1.1

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

User has many Posts / Post belongs to User のアソシエーションがある関連テーブルの場合です。

エラーが発生したコード

Users の関連テーブルである Posts テーブルを一緒に取得して、Posts テーブルの created カラムの降順(新しい順)でソートさせようとしました。最初に書いてたコードが以下のとおり。

src/Controller/HomeController.php

このコードだとエラーが発生した。

改善して解決したコード

訳)order 句の ‘created’ カラムが曖昧ですよ。

というエラーメッセージなので、つまり created カラムは Posts テーブルにも Users テーブルにも存在するので、どちらの created カラムを指しているのかが分からない、という意味でしょう。

なので以下のように、order 句で Posts.created とテーブル名を付けてカラム名を指定しました。

src/Controller/HomeController.php

これで解決できて、目的通り Posts テーブルの created カラムの降順でソートした結果を取得できました。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!