現在CakePHP4で開発しています。
イメージとしてはアットホームやホームズの様に条件を指定して検索していくシステムを作成しています。
以下実際の内容とは違いますが関係は同じ様な感じです。
AはたくさんのBとCを持っている(hasMany)状態です。
Bは
A_idを持っているのでAと紐づきます。
Cは
A_idを持っているのでAと紐づきます
またCとBは関連テーブルがあり多対多の関係で紐づきます。
検索をする時に
CとBのアソシエーションがある時は関連のあるBの条件でだけ絞り込み
CとBのアソシエーションがない時はAがもつ全てのBの条件でヒットする様にしたいです。
そこでSQLで以下の様なことをできないか考えています。
CとBのアソシエーションがある時は関連のあるBとだけアソシエーションする
CとBのアソシエーションがない時はAがもつ全てのBとアソシエーションする
そもそもSQLでその様なことは可能でしょうか?
できるとしたらお教えいただきたいです。
無理な場合どのような対策が必要でしょうか。
テーブル構造の見直しも含め検討しています。
また、このようなない場合は全部の様な時は一般的にどの様に対応するのでしょうか?
そもそも設計的によくないのでしょうか?
現在のABCとBC関連テーブルは以下の様な形です。
テーブルA
id | name |
---|---|
1 | Ahoge |
テーブルB
|id|a_id|name|
|:--|:--:|
|1|1|Bhoge1|
|2|2|Bhoge2|
テーブルC
|id|a_id|name|
|:--|:--:|
|1|1|Choge1|
|2|2|Choge2|
BC関係テーブル
|id|b_id|c_id|
|:--|:--:|
|1|1|2|
|2|2|2|
あなたの回答
tips
プレビュー