今天我想出了遗留代码。我有一个函数,有时会产生很长的运行时间,并且经常在我们的合作伙伴处发生超时。主要是功能检查剧院的预留座位,但不是获取所有数据并检查空座位,它运行每个座位的查询。 (我认为)它会产生巨大的运行时间。
以下是对应代码:
public function printTicketChaos(){
$input = Input::all();
if( isset($input['date_id']) && !isset($input['reserve_id']) ){
$program_date = \Model\ProgramDate::find($input['date_id']);
if($input['piece'] > $program_date->available_capacity){
//dd($input['piece'] . ' ??? ' . $program_date->available_capacity);
return true;
}
$reserved_seats = Session::get('reserved_seats');
if($reserved_seats != null && count($reserved_seats) > 0){
foreach ($reserved_seats as $row => $seats) {
foreach ($seats as $key => $seat) {
$reserve = \Model\Reserve::whereForeignDateId($program_date->id)->whereTableName('programs')->whereHas('seats', function($query) use($row, $seat){ $query->whereRow($row)->whereSeat($seat); })->first();
if($reserve != null){
return true;
}
$oi = \Model\OrderItem::whereForeignId($program_date->id)->whereTableName('programs')->whereHas('order', function($query){ $query->whereStorno(0); })->whereHas('seats', function($query) use($row, $seat){ $query->whereRow($row)->whereSeat($seat); })->first();
if($oi != null){
return true;
}
}
}
}
}
return false;
}
我认为解决方案可能是我查询所有座位,然后检查foreach中的空座位。这是一个好主意,或者您认为哪种方法最好?
代码使用Laravel 4.2
谢谢你的喔!
答案 0 :(得分:0)
好的,我在查询和逻辑方面做了更改,但它仍然很慢。 系统使用第三方PDF生成器为客户创建“票证”,这就是“坏人”。