Estoy tratando de pasar el resultado de una consulta a una vista, pero sigo recibiendo un error: Se excedió el tiempo máximo de ejecución de 30 segundos . Estoy pasando objetos más pequeños y funciona bien, pero se interrumpe cuando paso el resultado de $monthlyBidStatment a través de. Si hay una mejor manera de hacer esto, realmente agradecería cualquier consejo. Gracias por adelantado.
public function sendEmailInvoice(Request $request) { $invoice = Invoice::where('id', '=', $request->invoiceId)->first(); $startDate = $invoice->start_billing_date; $startDateSql = date("Ymd", strtotime($startDate)); $endDate = $invoice->end_billing_date; $endDateSql = date("Ymd", strtotime($endDate)); $affiliate = AffiliateDetail::where('id', '=', $invoice->affiliate_detail_id)->first(); $monthlyBidStatment = BidTracker::where('affiliate_detail_id', '=', $affiliate->id)->whereBetween('created_at', [$startDateSql, $endDateSql])->get(); // LOG::info(gettype($monthlyBidStatment)); Mail::send('pdf.invoicePDF', [ 'oAffiliate' => $affiliate, 'oInvoice' => $invoice, 'bids' => $monthlyBidStatment, 'showBreadcrumb' => false ], function ($m) use ($affiliate, $invoice, $monthlyBidStatment) { $m->from(env('APP_EMAIL'), env('APP_NAME')); $m->to($affiliate->info_billing_email, $affiliate->info_company_name)->subject(env('APP_NAME') . ' Invoice'); $pdf = PDF::loadView('pdf.invoicePDF', [ 'oAffiliate' => $affiliate, 'oInvoice' => $invoice, 'bids' => $monthlyBidStatment, 'showBreadcrumb' => false ]); $m->attachData($pdf->output(), 'invoice.pdf'); }); $request->session()->flash('message', 'Successfully sent email invoice'); return array( 'status' => 'ok' ); }Revisa la siguiente línea:
$invoice = Invoice::where('id', '=', $request->invoiceId)->first(); // Its a collection object.Todos los conjuntos de resultados múltiples devueltos por Eloquent son instancias del objeto Illuminate\Database\Eloquent\Collection, incluidos los resultados recuperados a través del método get o a los que se accede a través de una relación. El objeto de la colección Eloquent amplía la colección base de Laravel, por lo que naturalmente hereda docenas de métodos utilizados para trabajar con fluidez con la matriz subyacente de modelos Eloquent.
En términos breves, podemos decir que un objeto de colección contiene muchas cosas, pero en su caso solo desea la parte de datos. Entonces, en lugar de pasar el objeto de colección completo, conviértalo en una matriz iterándolo con la columna requerida y pase esa matriz a la plantilla de correo electrónico. Eliminará los gastos generales.
Ex:
$data = array(); $users = App\User::where('active', 1)->get(); foreach ($users as $user) { $data[] = $user->name; } // Use $data where required