我对 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 = 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() 方法的同时如何提高效率?