Получить несколько данных Cakephp 3

у меня есть 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)

Любое предложение приветствуется.


person Ayoub Bousetta    schedule 27.06.2016    source источник
comment
Я бы посоветовал вам добавить больше информации к вашему вопросу, поскольку в его нынешнем виде вы, вероятно, не получите особой помощи, поскольку это невоспроизводимая проблема. Например, какую СУБД вы используете? Как выглядят полученные запросы? Сколько записей извлекается? Где именно тратится время (используйте профилировщик, чтобы выяснить это)? так далее...   -  person ndm    schedule 27.06.2016


Ответы (1)


Вместо того, чтобы загружать модель и создавать запрос выбора (что увеличивает время запроса), вы должны использовать TableRegistry.

Например, вы должны использовать $usersTable = TableRegistry::get('Users'); вместо $users = $this->loadModel('Users');, и после этого вы можете запрашивать свои данные с помощью $query = $usersTable->find('all')->..... и повторять строки запроса с помощью foreach($query as $row).

Это должно быть быстрее, учитывая, что он не загружает всю вашу модель «Пользователи», а использует только UsersTable, с которой вы можете легко работать с запросами cakePHP.

Вот некоторая подробная информация: http://book.cakephp.org/3.0/en/orm/table-objects.html#getting-instances-of-a-table-class

Я надеюсь, что это помогает! ;)

person Kopezaur    schedule 08.07.2016
comment
Я уже пробовал это, проблема в том, что я работаю на сервере напрямую. а в режиме отладки выполнение запроса занимает много времени. Я пробовал это на локальном хосте, и он отлично работает, даже если для режима отладки установлено значение true. - person Ayoub Bousetta; 09.07.2016