为什么CakePHP不使用SQL连接

为什么CakePHP不使用SQL连接,cakephp,join,containable,Cakephp,Join,Containable,我是CakePHP的新手,遇到了一个似乎找不到好的解决方案的问题。我的应用程序具有以下关联: 议员有很多票 他有很多票 投票给议员,开始吧 我想检索一名成员所投的所有选票以及与每次投票相关联的名单。以下代码生成完美的结果: $this->Member->id = $id; $this->Member->contain(array('Vote' => 'Roll')); $this->set('member_data', $this->Member->

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

议员有很多票 他有很多票 投票给议员,开始吧 我想检索一名成员所投的所有选票以及与每次投票相关联的名单。以下代码生成完美的结果:

$this->Member->id = $id;
$this->Member->contain(array('Vote' => 'Roll'));
$this->set('member_data', $this->Member->read());
不幸的是,这段代码也非常低效。Cake不只是执行类似“从投票中选择*”的操作,而是执行以下操作:

从成员id=100的投票中选择* 从roll_id=1的卷中选择* 从roll_id=2的卷中选择* 从roll_id=3的卷中选择* 从roll_id=4的卷中选择* 等等——当超过500卷比赛时,这是一个大问题!
在仍然使用read方法的情况下,如何提高效率?

我认为您可以尝试使用投票模型,尝试以下代码:

$this->Vote->recursive = 0;
$this->Vote->find('all',array('conditions'=>array('Vote.member_id'=>100)));

您是否指定了模型关系?是的。在这三个模型中,我都从上面的项目符号列表中指定了关联。可能还需要注意的是,即使将Roll和Vote之间的关系更改为Roll has one Vote,这个问题仍然存在。这可能会对你有所帮助。这很好,但我更感兴趣的是为什么我以前的尝试效率如此之低。称之为教学机会。您希望根据查询从投票表中获取数据,并尝试使用成员表进行访问,这会使其更加复杂。因此,如果您希望从任何表中获取数据,请尝试使用相同的模型,关系将自动填充