0

我有 2 个表(用户和技术),我需要在第三个控制器中分别从它们检索数据。

我可以使用 loadmodel 和 find() 来做到这一点,然后通过 $this->set() 设置要查看的数据,但是通过这样做,网站变得非常慢 > 70 秒,当我尝试只检索一个时它运行得很快。

所以基本上我需要优化我的查询并加快我的数据库

这是我的代码。

$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'));

一些 DebugKit 图像 在此处输入图像描述 在此处输入图像描述

如您所见,我只有 2 个查询,但在调试中它显示 10 和 TABLE_SCHEMA 花了 35322 毫秒,它被称为 2 次(35322 * 2)

欢迎任何建议。

4

1 回答 1

0

您应该使用TableRegistry.

例如,您应该使用$usersTable = TableRegistry::get('Users');而不是,$users = $this->loadModel('Users');之后您可以使用 查询数据$query = $usersTable->find('all')->.....并使用 迭代查询的行foreach($query as $row)

考虑到它不会加载您的整个“用户”模型并且只使用您可以通过 cakePHP 查询轻松操作的用户表,它应该会更快。

这是一些详细信息:http ://book.cakephp.org/3.0/en/orm/table-objects.html#getting-instances-of-a-table-class

我希望它有帮助!;)

于 2016-07-08T13:48:02.763 回答