Laravel超过60秒的最大执行时间

时间:2018-10-20 13:17:34

标签: laravel orm eloquent laravel-5.7

我的laravel应用程序中有很多关系。 模型Competition属于Many 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中。然后,如果找不到位置,我会将位置附加到比赛中。

问题在于正在运行的查询数量;一个用于比赛数据,一个用于在比赛地点内未找到ID时检索其ID的位置,另一个用于在附加数据时存储数据。

这将返回错误:“最长执行时间超过60秒”

这样做的正确方法是什么?为了最大程度地减少所需的查询量。

预先感谢

3 个答案:

答案 0 :(得分:0)

您的查询似乎还可以,但是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文件function中添加行

set_time_limit($seconds);

否则增加max_execution_time中的php.ini并重新启动服务器

答案 1 :(得分:0)

由于某些原因,当我关闭Sqlite DB浏览器桌面程序时,该错误没有出现。但是,这很奇怪,因为自创建应用以来,我就打开了sqlite db浏览器应用。

答案 2 :(得分:0)

清除所有缓存

step:1 转到您的项目目录并打开命令提示符

step:2 在命令提示符中写入命令 php artisan optimize:clear

然后检查您的问题是否已解决...