状況
CakePHPにてレコードとその関連レコードを取ろうとしたときのこと。 以下のようにコードを書いていた。(一部変えています。)
ArticleのテーブルとAuthorのテーブルがあり、お互いに紐付いているとする。
public function getArticle($foo_id, $hoge) { $condition = ['id' => $foo_id, 'num_books' => $hoge]; $query = $this->find('all')->where($condition)->contain(["Author"]); $article = $query->first(); return $article; }
そうすると以下のようなメッセージが出てきた。セキュリティの都合上、上部分のみのスクショが以下。
よく見ると以下のメッセージが書かれている。
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
異なるテーブルに同じIDがあるときこのミスが発生する。
ambiguous はあいまいという意味である。データベースのほうが曖昧なのかな?と思い覗いてみると両方にid
カラムが入っていた。
以下のように書き直すとうまくいった。
public function getArticle($foo_id, $hoge) { // $condition = ['id' => $foo_id, 'num_books' => $hoge]; // 上記のコードだとどっちのテーブルのidなのかがよくわからない。下記でどっちのテーブル(この場合はArticle)か指定する。 $condition = ['Article.id' => $foo_id, 'num_books' => $hoge]; $query = $this->find('all')->where($condition)->contain(["Author"]); $article = $query->first(); return $article; }
プログラミング周りの英語をもっと身に着けないといけないと思った日であった。