【CakePHP3】containでデータ取得しようとしたらエラーになってしまった!
CakePHP3の話ですけども、テーブルからデータを取得するとき「contain」によって別テーブルからもデータを取得できますよね。
以下のコードでは「DraftPosts」テーブルと「Posts」テーブルから同時にデータをゲットしています。
public function initialize() { $this->Posts = TableRegistry::get('Posts'); $this->Draft_posts = TableRegistry::get('DraftPosts'); } public function _get_data() { $author_id = 1234; $posts = $this->Draft_posts->find()->where(['Draft_posts.author_id' => $author_id])->contain(['Posts'])->all(); return $posts; }
このとき「Column not found: xxxx Unknown column 'Draft_posts.author_id' in 'where clause'」とエラーが出てしまい取得失敗してしまいました・・。
この原因はかんたんです。
テーブル名は「Draft_posts」ではなくて「DraftPosts」です。単にテーブル名を間違っていただけなんですね・・。
つまり以下のようにして検索するのが正解です。
$posts = $this->Draft_posts->find()->where(['DraftPosts.author_id' => $author_id])->contain(['Posts'])->all();
テーブル名は「スネークケース」なのか「キャメルケース」なのか表記を統一した方がいいですね・・。
以上!