1

私は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は、のようなことをする代わりに、次のことを行います。

  1. SELECT * FROM votes WHERE member_id = 100
  2. SELECT * FROM rolls WHERE roll_id = 1
  3. SELECT * FROM rolls WHERE roll_id = 2
  4. SELECT * FROM rolls WHERE roll_id = 3
  5. SELECT * FROM rolls WHERE roll_id = 4
  6. など-500以上のロールが一致する場合の大きな問題!

read()メソッドを使用しながら、これをより効率的にするにはどうすればよいですか?

4

1 に答える 1

2

投票モデルから試すことができると思います。次のコードを試してください。

$this->Vote->recursive = 0;
$this->Vote->find('all',array('conditions'=>array('Vote.member_id'=>100)));
于 2012-07-20T12:00:52.610 に答える