Сегодня у нас возникла запутанная проблема с получением коллекции нашей модели «TimeLog».
Мы просто хотели получить все журналы времени с дополнительной информацией из модель доски и модель задачи.
В одной строке журнала времени у нас были Board_id и Task_id. В обоих случаях соотношение 1:1.
Это был наш первый код для получения всех данных. Это занимало много времени, и иногда у нас возникал таймаут:
BillingController.php
Код: Выделить всё
public function byYear() {
$timeLog = TimeLog::get();
$resp = array();
foreach($timeLog->toArray() as $key => $value) {
if(($timeLog[$key]->board_id && $timeLog[$key]->task_id) > 0 ) {
array_push($resp, array(
'board_title' => isset($timeLog[$key]->board->title) ? $timeLog[$key]->board->title : null,
'task_title' => isset($timeLog[$key]->task->title) ? $timeLog[$key]->task->title : null,
'id' => $timeLog[$key]->id
));
}
}
return response()->json($resp);
}
Код: Выделить всё
public function board()
{
return $this->belongsTo('App\Board', 'board_id', 'id');
}
public function task()
{
return $this->belongsTo('App\Task', 'task_id', 'id');
}
BillingController.php
Код: Выделить всё
public function byYear() {
$timeLog = TimeLog::
join('oc_boards', 'oc_boards.id', '=', 'oc_time_logs.board_id')
->join('oc_tasks', 'oc_tasks.id', '=', 'oc_time_logs.task_id')
->join('oc_users', 'oc_users.id', '=', 'oc_time_logs.user_id')
->select('oc_boards.title AS board_title', 'oc_tasks.title AS task_title','oc_time_logs.id','oc_time_logs.time_used_sec','oc_users.id AS user_id')
->getQuery()
->get();
return response()->json($timeLog);
}
В таблице журнала времени около 20 тыс. записей.
Мои вопросы: :
- Почему первый метод выходит за пределы диапазона (что вызывает тайм-аут?)
- Что такое getQuery(); точно?
Подробнее здесь: https://stackoverflow.com/questions/453 ... ot-of-time
Мобильная версия