laravel Larvel查询生成器查询需要20秒执行

rnmwe5a2  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个Laravel查询生成器查询,需要20多秒才能检索到~2500条记录。理想情况下,它应该花费更少的时间。我认为我的查询中的orOn连接是导致这个问题的原因。我不知道如何优化这个查询,使其执行得更快

DB::table('customer as c')->leftJoin('feedback as fr', 
                    function($leftJoin){
                        $leftJoin->on('c.active_feedback_req_id_1','=','fr.id')
                        ->orOn('c.active_feedback_req_id_2','=', 'fr.id') 
                        ->orOn('c.active_feedback_req_id_3','=', 'fr.id'); 
                    })
                    ->leftJoin('feedback_request_status as frs', 'fr.feedback_request_status_id', 'frs.id')
                    ->leftJoin('customer_service as cs', 'c.id', 'cs.customer_id')
                    ->where('c.business_location_id', $request->location_id)
                    ->where('c.is_active', 1)
                    ->select('c.id as customer_id','c.name as customer_name','c.created_at as customer_creation_date','c.email as customer_email', 'c.phone as customer_phone','c.phone_extension as customer_phone_extension','c.whatsApp as customer_whatsApp','c.whatsApp_phone_code as customer_whatsApp_extension','active_feedback_req_id_email as email_req','active_feedback_req_id_sms as sms_req','active_feedback_req_id_whatsApp as whatsApp_req','fr.service_taken as service_taken','fr.service_provider as service_provider', 'fr.reminders_sent as reminders_sent', 'frs.status as status','frs.color_code as color_code', 'c.is_active as active_status', 'c.is_unsubscribed as is_unsubscribed','cs.service_taken as customer_service_taken', 'cs.service_provider as customer_service_provider')
                    ->orderBy('c.created_at','DESC')
                    ->groupBy('c.id')
                    ->get();

请让我知道如果有人可以帮助这一点。

yyhrrdl8

yyhrrdl81#

我认为你可以使用渴望加载。对于所有这些左联接,您可以在客户模块中定义关系函数。
我认为你应该把它们当作独立的关系,这样称呼它们。
客户::with('getActiveFeedback1','getActiveFeedback2 ','getActiveFeedback3','getFeedbackRequestStatus ','getCustomerService','getbusinesslocation ')->where(' is_active ',1)->orderBy(' created_at ',' DESC')->groupBy('id')->get();

相关问题