我的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秒”
这样做的正确方法是什么?为了最大程度地减少所需的查询量。
预先感谢
答案 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
然后检查您的问题是否已解决...