在将数据存储到Laravel中的另一个表之后,更新来自不同Model的字段

问题描述 投票:3回答:1

我想请你帮忙。我不是一个很难的编码人员,所以我无法构建这样做的正确代码。

我有一个订单付款应用程序,可以保存某些订单的付款。那里没有问题。数据正在ORDER_PAYMENTs表中保存。

在我的创建功能中我有这个

public function create($order_id)
{

    $order = Orders::find($order_id);
    $order->company;
    $order->currency;
    $banks = Banks::all('name','acronym','id')->pluck('name','id')->all();
    $balance = Orderpayments::where('order_id', '=', $order_id)->sum('amount');
    // dd($balance);
    return view('orderPayments.create', compact('balance'))
               ->with('banks', $banks)
               ->with('order', $order);
}

变量$ balance进行总量的计算,然后我将在create.blade中进行实际计算以检查是否还有余额。这是它的样子

    <div class="form-group">
        <span><strong>Remaining Balance</strong></span>
        <p class="text-danger">@php $remainingBalance = $order->grandtotal-$balance; @endphp
        {{ number_format($remainingBalance, 2) }}</p>                           
</div>  

现在,我想要做的是在存储数据(我指的是STORE功能)时创建条件,如果付款涵盖所有余额,它应该更新列,在ORDERS表中的PAID。这是我的商店功能的当前外观。

public function store(Request $request)
    {
        $this->validate($request, [
            'order_id'      => '',
            'company_id'    => '',
            'currency_id'   => '',
            'bank'          => '',
            'type'          => '',
            'payment_date'  => '',
            'amount'        => 'min:1',
            'rate'          => '',
            'bank'          => '',
            'page'          => '',
            'number'        => '',
            'booklet_number'=> '',
            'voucher_num'   => '',
            'notes'         => '',
            'user_id'       => ''
        ]);
        $orderpayments = Orderpayments::create($request->only(
            'order_id',
            'company_id',
            'currency_id',
            'bank',
            'type',
            'payment_date',
            'amount',
            'rate',
            'bank',
            'page',
            'number',
            'booklet_number',
            'voucher_num',
            'notes',
            'user_id'
        ));

        // NO IDEA ON HOW TO MAKE THE CONDITION PROPERLY
        // $balance = Orderpayments::where('order_id', '=', $order_id)->sum('amount');
        $order = Orders::all();
        // $paidOrder = $order->paid;

        dd($balance);
        // if ($balance < 1) {
        //     $amount = ;
        //     $item->save();
        // }

        if ($request){
            Session::flash('message','Purchase order was successfully added');
            Session::flash('m-class','alert-success');
        } else {
            Session::flash('message','Data is not saved');
            Session::flash('m-class','alert-danger');
            return redirect()->route('orders.index');
        }
        return redirect()->route('orders.index');
    }

首先,我想从CREATE函数获取$ balance变量,因为它已经有计算然后从那里我将检查$balance是否低于1然后如果它将订单表中的PAID列更新为'1'

我不是一个很难的编码器我只是做了这么远,因为来自世界各地的教程并在这里提问。我找不到合适的教程来解决我的问题。你能帮我构建我想要实现的逻辑吗?

非常感谢你们!

进展更新

我现在有这个

    // HERE'S THE PART THAT THE CONDITION IS PLACE
    //get the total amount paid
    $totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
    //get the total order cost
    $orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
    //Set variable for grand total attribute Orders table
    $grandtotal = $orderGrandTotal->first()->grandtotal;
    //set variable for paid attribute in Orders table
     $paid = $orderGrandTotal->first()->paid;
    //Get the difference between  total order cost and total amount paid
    $totalBalance = $grandtotal - $totalPaidAmount;

    // dd($totalBalance);
    if ($totalBalance == 0) {
        $paid = 1;
        $paid->save();    
    }

我的新问题是,当余额达到0时,我放的条件应该保存$ paid = 1吧?相反,我有这个错误

enter image description here

目前这是我的问题。保存部分和条件。

我希望你能帮助我们。提前致谢!!!

解决了

伙计们,以防你在这种情况下陷入困境,这就是我所做的。

    // HERE'S THE PART THAT THE CONDITION IS PLACE
    //get the total amount paid
    $totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
    //get the total order cost
    $orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
    //Set variable for grand total attribute Orders table
    $grandtotal = $orderGrandTotal->first()->grandtotal;

    //Get the difference between  total order cost and total amount paid
    $totalBalance = $grandtotal - $totalPaidAmount;

    if ($totalBalance < 1) {
        $setToPaid = \App\Orders::where('id', '=', $orderpayments->order_id)->first();
        $setToPaid->paid = 1;
        $setToPaid->save();
    }

    if ($request){
        Session::flash('message','Purchase order was successfully added');
        Session::flash('m-class','alert-success');
    } else {
        Session::flash('message','Data is not saved');
        Session::flash('m-class','alert-danger');
        return redirect()->route('orders.index');
    }
    return redirect()->route('orders.index');

Learn more here感谢@Marco提示!

php laravel if-statement condition
1个回答
0
投票

来自docs

 // HERE'S THE PART THAT THE CONDITION IS PLACE
//get the total amount paid
$totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
//get the total order cost
//$orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
$orderGrandTotal = Orders::find($orderpayments->order_id);
//Set variable for grand total attribute Orders table
$grandtotal = $orderGrandTotal->grandtotal;
//set variable for paid attribute in Orders table
 $paid = $orderGrandTotal->paid;
//Get the difference between  total order cost and total amount paid
$totalBalance = $grandtotal - $totalPaidAmount;

// dd($totalBalance);
if ($totalBalance == 0) {
    $orderGrandTotal->paid = 1;
    $orderGrandTotal->save();    
}

我没有测试过,但这是你想要的方向。

© www.soinside.com 2019 - 2024. All rights reserved.