Laravel Controller - 将变量从函数传递给函数

时间:2017-08-01 06:09:08

标签: php laravel

所以我有两个名为' search'和' pdfview'。

每次我使用search函数时,我都想传递一个查询,它会选择某些数据到pdfview函数。

这是我的search功能:

public function search(Request $request)
{
    if ($request->period == 'Daily') {
        $datefrom = Carbon::now()->startOfDay();
        $dateto = Carbon::now()->endOfDay();
    }
    elseif ($request->period == 'Weekly') {
        $datefrom = Carbon::now()->startOfWeek();
        $dateto = Carbon::now()->endOfWeek();
    }
    elseif ($request->period == 'Monthly') {
        $datefrom = Carbon::now()->startOfMonth();
        $dateto = Carbon::now()->endOfMonth();
    }
    elseif ($request->period == 'Yearly') {
        $datefrom = Carbon::now()->startOfYear();
        $dateto = Carbon::now()->endOfYear();   
    }
    else {
        $datefrom = Carbon::parse($request->datefrom);
        $dateto = Carbon::parse($request->dateto);
    }

    $solditems = DB::table('orders')
        // ->join('orders', 'receipts.receipt_id', '=', 'orders.receipt_id')
        ->whereDate('orders.created_at', '>=', $datefrom)
        ->whereDate('orders.created_at', '<=', $dateto)
        ->where('status','=', 'served')
        ->select('orders.*', DB::raw('SUM(subtotal) as subtotal'), DB::raw('SUM(qty) as qty'))
        ->groupBy('item_id')
        ->orderBy('created_at', 'dsc')
        ->get();

    return view('salesreports.sellingitems.index', compact('solditems'));
}

这是pdfview函数:

public function pdfview(Request $request)
{
    $solditems = DB::table('orders')
        ->where('status', 'served')
        ->select('orders.*', DB::raw('SUM(subtotal) as subtotal'), DB::raw('SUM(qty) as qty'))
        ->groupBy('item_id')
        ->orderBy('qty', 'dsc')
        ->get();

    view()->share('solditems', $solditems);

    if ($request->has('download')) {
        $pdf = PDF::loadView('salesreports.sellingitems.pdf');
        return $pdf->download('sellingitems-' . Carbon::now() . '.pdf');
    }

    return view('salesreports.sellingitems.pdf');
}

如您所见,pdfview函数有$ solditems的默认查询。但我希望该变量来自我的search函数。

更新:我设法使用session来解决问题。

以下是您使用会话进行存储的方式:

session()->put('period', 'Daily');

这就是你用会话检索的方式:

$period = $request->session()->get('period', 'default');

2 个答案:

答案 0 :(得分:0)

public function getSolditems()
{
    if (!isset($this->solditems)) {
        $solditems = DB::table('orders')
            // ->join('orders', 'receipts.receipt_id', '=', 'orders.receipt_id')
            ->whereDate('orders.created_at','>=', $datefrom)
            ->whereDate('orders.created_at', '<=', $dateto)
            ->where('status','=', 'served')
            ->select('orders.*', DB::raw('SUM(subtotal) as subtotal'), DB::raw('SUM(qty) as qty'))
            ->groupBy('item_id')
            ->orderBy('created_at','dsc')
            ->get();
        $this->solditems = $solditems;
    } else {
        $solditems = $this->solditems;
    }

    return $solditems;
}

public function search(Request $request)
{
    ....
    $solditems = getSolditems();
    ....
}

public function pdfview(Request $request)
{
    ....
    $solditems = getSolditems();
    ....
}

答案 1 :(得分:0)

我认为您可以使用$request->merge()方法将$solditems数据传递给来自pdfview()的{​​{1}}方法

search()