взять переменную из функции карты в Laraval - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу проверить, меньше ли запрошенное количество, поэтому Как я могу взять переменную closed_balance в функции карты и использовать условие if в соответствии с приведенным ниже кодом,

я пытался используется как if($item->closing_balance < $qty) при получении ошибки

Неопределенная переменная: closed_balance

Код контроллера

  $data=$request->all();
       if(count($request->pid) > 0)
       {
        foreach($request->pid as $key=>$v){
            $data2=([
                'order_no'=>$fk,
                'pid'=>$request->pid [$key],
                'sid'=>$request->sid,
                'qty'=>$request->qty [$key],
            ]);

            $pid= $request->pid [$key];
            $qty=$request->qty [$key];

            $check_balance=DB::table('products')
                      ->selectRaw('sum(stocks.qty) as totalstock')
                      ->selectRaw('sum(loadings.qty) as totalloading')
                      ->join('stocks','stocks.pid','=','products.id')
                      ->join('loadings','loadings.pid','=','products.id')
                      ->where('stocks.pid','=',$pid)
                      ->where('loadings.pid','=',$pid)
                      ->get() ->map(function ($item) {
                        $item->totalstock = $item->totalstock ?? 0;
                        $item->totalloading = $item->totalloading ?? 0;
                        $item->closing_balance = abs($item->totalstock - $item->totalloading);
                        return $item;
                    });

        //check if quatity is less than requested
            if($closing_balance  < $qty){

               return redirect()->back()
               ->withErrors(['The stock quantity is less, Please check your stock quantity! ']);
           }
           else{

            Loading::create($data2);
        }

1 Ответ

0 голосов
/ 10 апреля 2020

Я не совсем уверен, что вы пытаетесь сделать здесь sh, потому что функция карты выполняет итерацию по каждому отдельному элементу в коллекции и выглядит так, будто Closing_balance является атрибутом каждого элемента, поэтому не уверен, что именно Вы хотели бы сравнить.

Вы можете добавить амперсанд '&' перед переменной к вашей функции внутри оператора use(), чтобы использовать и изменять эту переменную внутри и снаружи функции карты.

Я вам верю хотите суммировать все итоговые остатки по каждому элементу, чтобы вы могли сделать что-то подобное в функции карты.

$collection->map(function ($item) use (&$closing_balance) {
    $item->totalstock = $item->totalstock ?? 0;
    $item->totalloading = $item->totalloading ?? 0;
    $item->closing_balance = abs($item->totalstock - $item->totalloading);

    $closing_balance += $item->closing_balance;

    return $item;
});

// Now you can use $closing_balance variable.
if($closing_balance  < $qty){
    // Your code...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...