私はCakePHPにかなり慣れていないので、良い解決策を見つけることができないような問題に遭遇しました。私のアプリケーションには次の関連付けがあります。
- メンバーhasMany投票
- ロールhasMany投票
- 投票所属メンバー、ロール
メンバーが投じたすべての投票と、各投票に関連付けられたロールを取得したいと思います。次のコードは完璧な結果を生成します。
$this->Member->id = $id;
$this->Member->contain(array('Vote' => 'Roll'));
$this->set('member_data', $this->Member->read());
残念ながら、このコードも非常に非効率的です。SELECT * FROM votes JOIN rolls ON votes.roll_id = rolls.id WHERE votes.member_id = 100Cakeは、のようなことをする代わりに、次のことを行います。
SELECT * FROM votes WHERE member_id = 100SELECT * FROM rolls WHERE roll_id = 1SELECT * FROM rolls WHERE roll_id = 2SELECT * FROM rolls WHERE roll_id = 3SELECT * FROM rolls WHERE roll_id = 4- など-500以上のロールが一致する場合の大きな問題!
read()メソッドを使用しながら、これをより効率的にするにはどうすればよいですか?