Laravel Превышено максимальное время выполнения 60 секунд - PullRequest
0 голосов
/ 20 октября 2018

У меня есть отношение ко многим в моем приложении laravel.Модель Competition принадлежит ToMany Location и наоборот.

Теперь я пытаюсь предоставить функциональность, позволяющую добавить существующие места в соревнование.

$competition    = Competition::where('id','=', $request->input('contestId'))->firstOrFail();
$locations      = $competition->locations;
$locationNames  = [];

foreach ($locations as $location) {
    $locationNames[] = $location->name;
}

if (!in_array($request->input('locationList'), $locationNames)) {
    $locationId = Location::where('name','=', $request->input('locationList'))->firstOrFail()->id;
    $competition->locations()->attach($locationId);
}

Мне нужно проверитьГде у конкурентов уже есть место, поэтому я храню данные о соревнованиях внутри $competition.После этого, если местоположение не было найдено, я присоединяю его к соревнованию.

Проблема заключается в количестве запущенных запросов;один для данных соревнования, один для местоположения, чтобы получить его идентификатор, когда он не был найден внутри местоположений соревнования, и один для хранения данных при присоединении.

Это возвращает ошибку: «Превышено максимальное время выполнения 60 секунд»

Как правильно это сделать?Чтобы свести к минимуму количество необходимых запросов.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

По какой-то причине ошибка не появилась , когда я закрыл настольную программу браузера Sqlite DB .Тем не менее, это очень странно, так как у меня было открыто приложение-браузер sqlite db с самого начала его создания.

0 голосов
/ 20 октября 2018

Ваш запрос, кажется, в порядке, но цикл foreach. Я думаю, что он не в порядке, поэтому обновите код, подобный этому

$competition = Competition::where('id','=', $request->input('contestId'))->firstOrFail();

if($locationId = Location::where('name','=', $request->input('locationList'))->first()){
      $competition->locations()->attach($locationId->id);
}

, если местоположение есть, то добавляется, в противном случае не добавляется

добавить строку в pubilc/index.php файл функция

set_time_limit($seconds);

в противном случае увеличить max_execution_time в php.ini и перезапустить сервер

...