1

我对 CakePHP 还很陌生,遇到了一个我似乎找不到好的解决方案的问题。我的应用程序具有以下关联:

  • 会员有很多票
  • Roll hasMany Vote
  • 投票属于会员,滚动

我想检索成员所投的所有选票以及与每张选票相关的点名。以下代码产生了完美的结果:

$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 回答