質問: $this->Purchases->find('all')->where (['PurchaseDetails.ExhibitDetails.Products.Stands.id' => $selectId])->contain (['PurchaseDetails' => ['ExhibitDetails' => ['Products' => ['Stands']]]]); ``` ### 試したこと where句のところを、Stands.idにしてもダメでした。
回答: containを使った場合、hasManyは、別SQLとして実行されるため、where句で条件に使うことはできないません(上記のエラーはそれ以前に、where句の指定の仕方がおかしいため`Syntax error`になっていますが) machingを使えばできると思います。マニュアルにも `Shops.Cities.Countries` という多段なアソシエーションの例も記載されていますので、参考にしてください。 なお、マニュアルに注記されていますが、「この機能は INNER JOIN 句を生成しますので、条件によりすでに除外していない限り、 取得した行が重複しているかもしれず、find クエリーでは distinct の呼び出しを考えたいことでしょう。 これは、たとえば、同じユーザーが一つの記事 (Article) に複数回コメントした場合にありえます」ので気をつけてください。DebugKitなどで実際に実行されるSQLが想定したものになっているかは確認するといいと思います。