简体   繁体   English

Laravel Controller-在函数之间传递变量

[英]Laravel Controller - Pass a variable from function to function

So I have two functions named 'search' and 'pdfview'. 因此,我有两个名为“搜索”和“ pdfview”的函数。

Every time I use the search function, I want to pass a query where it selects certain data to the pdfview function. 每次使用search功能时,我都想传递一个查询,在该查询中它选择某些数据到pdfview函数。

Here's my search function: 这是我的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'));
}

And here's my pdfview function: 这是我的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');
}

As you can see, the pdfview function has a default query for the $solditems. 如您所见, pdfview函数具有$ solditems的默认查询。 But I wanted that variable to come from my search function. 但我希望该变量来自我的search功能。

UPDATE: I managed to solve the problem using session . 更新:我设法使用session解决了问题。

Here's how you store with session: 使用会话存储的方式如下:

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

and this is how you retrieve with session: 这是您通过会话进行检索的方式:

$period = $request->session()->get('period', 'default');
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();
    ....
}

I think you can use $request->merge() method to pass $solditems data to pdfview() method from search() 我认为您可以使用$request->merge()方法将$solditems数据从search()传递给pdfview()方法

public function search(Request $request)
{
   ....
   $request->merge(['solditems'=>$solditems]);
   $this->pdfview()
}


public function pdfview(Request $request)
{
   $solditems = $request->get('solditems');
   ....
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM