私は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 = 100
Cakeは、のようなことをする代わりに、次のことを行います。
SELECT * FROM votes WHERE member_id = 100
SELECT * FROM rolls WHERE roll_id = 1
SELECT * FROM rolls WHERE roll_id = 2
SELECT * FROM rolls WHERE roll_id = 3
SELECT * FROM rolls WHERE roll_id = 4
- など-500以上のロールが一致する場合の大きな問題!
read()メソッドを使用しながら、これをより効率的にするにはどうすればよいですか?