前回の記事に引き続きfind->()where->
さらに2日くらい詰まった
やりたかったのは
Table_a | Table_b | Table_c |
a_id | b_id | c_id |
a_data1 | b_data1 | a_id |
a_data2 | b_data2 | b_id |
Table_bのb_idをGETで取得し、Table_cでb_idに関連付けられたa_idから、Table_aのデータを取得する。
その際、取得したTable_aデータの重複をなくすこと。
サブクエリーを使用することで解決できた。
サブクエリー
$sub_query = $this->Table_a->getAssociation(“Table_c”)->find()
->select([“a_id”])
->distinct()
->where([“Table_c.b_id IN” => $values]);
クエリー
$query = $this->Table_a->find()
->where([“a_id in” => $sub_query]);
distinct()を使うにはselect()がどうのこうのとか書いてあったけど、destinct()のカッコ内自体は空でいいのか。
getAssociation()は完全に謎。
公式サイトでも使われてるけど、説明なくない?
まあ書いてて完全には理解できないけど、なんとかググってヒントを得つつ自力でたどり着けた。
うれぴー