やったこと

webサービスを作るときに考えたことを垂れ流します

【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();

テーブル名は「スネークケース」なのか「キャメルケース」なのか表記を統一した方がいいですね・・。

以上!