我有2个表(用户和技术),我需要在第三个控制器内单独检索它们。
我可以使用loadmodel和find()然后通过$ this-> set()设置数据来查看但是通过这样做,网站变得非常慢> 70s,当我尝试只检索一个时,它可以快速工作。
所以基本上我需要优化我的查询并加快我的数据库
这是我的代码。
$users = $this->loadModel('Users');
$datas=$users->find('all')->select(['id','phone', 'first_name','last_name','birthday','email','website', 'address', 'resume', 'cv_url'])->where(['id' => 1])->bufferResults(false)->ToArray();
$technologies = $this->loadModel('Technologies');
$technologies=$technologies->find('all')->select(['id', 'name', 'slug', 'image', 'exp', 'exp_perc'])->bufferResults(false)->ToArray();
$this->set(compact('datas','technologies'));
你可以看到我只有2个查询,但是在调试中它显示10和TABLE_SCHEMA花了35322ms并且它被称为2时间(35322 * 2)
欢迎提出任何建议。
答案 0 :(得分:0)
您应该使用TableRegistry
,而不是加载模型并创建选择查询(这会增加查询时间)。
例如,您应该使用$usersTable = TableRegistry::get('Users');
而不是$users = $this->loadModel('Users');
,之后您可以使用$query = $usersTable->find('all')->.....
查询数据,并使用foreach($query as $row)
迭代查询的行。< / p>
考虑到它不会加载整个“用户”模型并且仅使用可以使用cakePHP查询轻松操作的UsersTable,它应该更快。
以下是一些详细信息:http://book.cakephp.org/3.0/en/orm/table-objects.html#getting-instances-of-a-table-class
我希望它有所帮助! ;)