Обновить поле из другой Модели после сохранения данных в другой таблице в Laravel - PullRequest
1 голос
/ 08 марта 2019

Я хотел бы попросить вас о помощи. Я не жесткий программист, поэтому не могу составить правильный код для этого.

У меня есть приложение для оплаты заказа, которое сохраняет оплату для определенных заказов. Там нет проблем там. данные сохраняются в таблице 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), что если платеж покрывает весь оставшийся остаток, он должен обновить столбец, ПЛАТА в ЗАКАЗЫ в таблице. Вот текущий вид функции моего магазина.

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');
    }

Сначала я подумываю получить переменную $ balance из функции CREATE , поскольку она уже имеет вычисления, а затем я проверю, не меньше ли $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');

Узнайте больше здесь Спасибо @Marco за подсказку!

1 Ответ

0 голосов
/ 08 марта 2019

Из документов

 // 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();    
}

Я не проверял, но вы должны идти в этом направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...