Получить сумму умножения двух значений столбца из несвязанных таблиц в корзине - PullRequest
0 голосов
/ 28 апреля 2018

В моем проекте электронной коммерции Laravel У меня есть 2 таблицы в базе данных:

 cart [c_id(pk), laundry, l1, dryclean, dc1, dc2, dc3, shop_id]
 price [p_id, p_l1, p_dc1, p_dc2, p_dc3, shop_id]

В контроллере я получаю цены на вход в магазин, то есть в одну строку

$price = DB::table('price')->where('price.shop_id', '=', auth()->id())->get();

также для получения строки из таблицы корзины. Я беру самую последнюю запись

$cart = DB::table('cart')->latest()->first();

Колонки для белья и химчистки из таблицы корзины могут иметь два значения: ДА и НЕТ. Если для белья указано «да», то пользователь также вводит l1 (это количество), иначе ноль.

аналогично, для сухой очистки столбец может иметь два значения YES и NO. Если ДА, то пользователь также вводит dc1, dc2, dc3 (количество предметов).

Теперь я хочу получить общую сумму на странице оформления заказа от контроллера, включая условия, при которых проверяются значения белья и химчистки.

До сих пор я вычислял сумму в файле просмотра.

@if ( $cart->dryclean == "no")
    @php $c1=0;$c2=0;$c3=0; @endphp
@else
      @if (is_null($cart->dc1))
      @php  $c1=0; @endphp
      @else
            @php
            $a1= $cart->dc1;
            $b1 =$price->p_dc1;
            $c1= $a1*$b1;
            @endphp
      @endif
      @if (is_null($cart->dc2))
      @php  $c2=0; @endphp
      @else
            @php
            $a2= $cart->dc2;
            $b2 =$price->p_dc2;
            $c2= $a2*$b2;
            @endphp
      @endif
      @if (is_null($cart->dc3))
      @php  $c3=0; @endphp
      @else
            @php
            $a3= $cart->dc3;
            $b3 =$price->p_dc3;
            $c3= $a3*$b3;
            @endphp
      @endif

      {{ $c1 + $c2 + $c3}}   <!-- This is total amount -->
      @endif

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

Заранее спасибо.

1 Ответ

0 голосов
/ 28 апреля 2018

Просто удалите синтаксис блейда из всего, что вы сделали.

if ( $cart->dryclean == "no" ) {

    $c1 = 0;
    $c2 = 0;
    $c3 = 0;

} else {

    if ( is_null($cart->dc1) ) {

        $c1 = 0; 

    } else {

        $a1 = $cart->dc1;
        $b1 = $price->p_dc1;
        $c1 = $a1 * $b1;

    } 

    if ( is_null($cart->dc2) ) {

        $c2 = 0;

    } else {

        $a2 = $cart->dc2;
        $b2 = $price->p_dc2; 
        $c2 = $a2 * $b2;

    } 

    if ( is_null($cart->dc3) ) {

        $c3 = 0;

    } else {

        $a3 = $cart->dc3;
        $b3 = $price->p_dc3;
        $c3 = $a3 * $b3;

    }

    // total used to be calculated here

}

$total = $c1 + $c2 + $c3;


return view('your.view.here')->with('total', $total);

Несколько советов, основанных на том, что я вижу:

  • Используйте логическое значение в поле $ cart-> dryclean. Это легче хранить и использовать, чем «да» и «нет».
  • Вы вычисляли сумму в блейде до того, как добрались до конца своего первого утверждения "если". Если бы значение dryclean было нет (или ложным), общее значение не было бы дано.
  • Для удобства чтения я рекомендую использовать полное имя, например $cost1. Я даже не могу сказать, является ли это вашим намерением, потому что он просто говорит «c1» ..
  • Многие вычисления можно обойти, используя оператор объединения нулей, чтобы задать значение по умолчанию, если первое значение равно нулю.

Если вы воспользуетесь моими советами, ваш контроллер будет похож на приведенный ниже пример.

if ( $cart->dryclean ) {

    $cost1 = ($cart->dc1 ?? 0) * $price->p_dc1;

    $cost2 = ($cart->dc2 ?? 0) * $price->p_dc2;

    $cost3 = ($cart->dc3 ?? 0) * $price->p_dc3;

} else {

    $cost1 = 0;
    $cost2 = 0;
    $cost3 = 0;

}

$total = $cost1 + $cost2 + $cost3;

return view('your.view.here')->with('total', $total);

Если вы хотите сделать шаг вперед, вы можете сделать это (используя троичный оператор):

// set class properties
$this->cart = $cart;
$this->price = $price;

$total = ( $cart->dryclean )
         ? $this->costOf('1') + $this->costOf('2') + $this->costOf('3')
         : 0;

return view('your.view.here')->with('total', $total);

Конечно, это использование другой закрытой функции вне исходной функции контроллера:

private funtion costOf($number)
{
return ( $this->cart->{'dc'.$number} ?? 0 ) * $this->price->{'p_dc'.$number};
}

Эта функция costOf использует строковую версию числа для захвата связанных полей в каждом типе модели.

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