检索多个数据Cakephp 3

时间:2016-06-27 14:02:43

标签: cakephp model-view-controller cakephp-3.2

我有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'));

一些DebugKit图像 enter image description here enter image description here

你可以看到我只有2个查询,但是在调试中它显示10和TABLE_SCHEMA花了35322ms并且它被称为2时间(35322 * 2)

欢迎提出任何建议。

1 个答案:

答案 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

我希望它有所帮助! ;)