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

В настоящее время в моем контроллере проекта Laravel я использую один запрос

ЗАПРОС 1

public function cartreview(Request $request,$sp_id, $service_id,$cart_id)
    {
    $total = DB::table('pricings')
    ->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
    ->select(DB::raw('sum(pricings.shirt*carts.quantity_shirt ) AS total'))                      
    ->where('pricings.sp_id', '=', $sp_id)
    ->where('carts.id', '=' , $cart_id)
    ->first();
    }

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

Теперь я также хочу добавить еще один предмет с рубашкой, такой как брюки, галстук и т. Д. Как передать большее умножение на сумму?

Пожалуйста, помогите мне с синтаксисом. Могу ли я сделать что-то вроде этого

QUERY 2

    $total = DB::table('pricings')
        ->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
        ->select(DB::raw('sum(pricings.shirt*carts.quantity_shirt ,
                             pricings.pant*carts.quantity_pant , 
                             pricings.tie*carts.quantity_tie) AS total'))                      
        ->where('pricings.sp_id', '=', $sp_id)
        ->where('carts.id', '=' , $cart_id)
        ->first();

ИЛИ даже если я вычисляю итоговую сумму отдельно для каждого элемента. Как ее добавить?

$total_shirt = DB::table('pricings')
    ->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
    ->select(DB::raw('sum(pricings.shirt*carts.quantity_shirt ) AS total_shirt'))                      
    ->where('pricings.sp_id', '=', $sp_id)
    ->where('carts.id', '=' , $cart_id)
    ->first();

   $total_pant = DB::table('pricings')
    ->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
    ->select(DB::raw('sum(pricings.pant*carts.quantity_pant ) AS total_pant'))                      
    ->where('pricings.sp_id', '=', $sp_id)
    ->where('carts.id', '=' , $cart_id)
    ->first();

   $total_tie = DB::table('pricings')
    ->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
    ->select(DB::raw('sum(pricings.tie*carts.quantity_tie ) AS total_tie'))                      
    ->where('pricings.sp_id', '=', $sp_id)
    ->where('carts.id', '=' , $cart_id)
    ->first();

$ total = $ total_shirt + $ total_pant + $ total_tie;

Для отображения значения в view.blade.php я использую что-то вроде {{$ total-> total}}

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

TRIED:

$waftotal = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(
                                        pricings.Regular_Laundry*carts.q_Regular_Laundry,
                                        pricings.Bedding_Mattress_Duvet_Cover*carts.q_Bedding_Mattress_Duvet_Cover,
                                        pricings.Bedding_Comforter_laundry*carts.q_Bedding_Comforter_laundry,
                                        pricings.Bedding_Blanket_Throw*carts.q_Bedding_Blanket_Throw,
                                        pricings.Bedding_Pillow_laundry*carts.q_Bedding_Pillow_laundry,
                                        pricings.Bath_Mat_laundry*carts.q_Bath_Mat_laundry,
                                        pricings.Every_Hang_Dry_Item*carts.q_Every_Hang_Dry_Item
                                        ) AS waftotal'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();

но выдает ошибку как

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с 'valuesings.Bedding_Mattress_Duvet_Cover c' в строке 1 (SQL: выберите сумму (valuesings.Regular_Laundry carts.q_Regular_Laundry, pricings.Bedding_Mattress_Duvet_Cover carts.q_Bedding_Mattress_Duvet_Cover, pricings.Bedding_Comforter_laundry carts.q_Bedding_Comforter_laundry, pricings.Bedding_Blanket_Throw carts.q_Bedding_Blanket_Throw, pricings.Bedding_Pillow_laundry carts.q_Bedding_Pillow_laundry, pricings.Bath_Mat_laundry carts.q_Bath_Mat_laundry, pricings.Every_Hang_Dry_Item carts.q_Every_Hang_Dry_Item) AS waftotal с pricings внутреннее соединение carts на carts. sp_id = pricings. sp_id где pricings. sp_id = 1 и carts. id = 23 предел 1)

Даже если я пишу отдельные запросы

$waf1 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Regular_Laundry*carts.q_Regular_Laundry) AS waf1'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();



                    $waf2 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Bedding_Mattress_Duvet_Cover*carts.q_Bedding_Mattress_Duvet_Cover) AS waf2'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();



                    $waf3 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Bedding_Comforter_laundry*carts.q_Bedding_Comforter_laundry) AS waf3'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();


                    $waf4 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Bedding_Blanket_Throw*carts.q_Bedding_Blanket_Throw) AS waf4'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();

                    $waf5 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Bedding_Pillow_laundry*carts.q_Bedding_Pillow_laundry) AS waf5'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();

                    $waf6 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Bath_Mat_laundry*carts.q_Bath_Mat_laundry) AS waf6'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();

                    $waf7 = DB::table('pricings')->join('carts', 'carts.sp_id', '=', 'pricings.sp_id')
                  ->select(DB::raw('sum(pricings.Every_Hang_Dry_Item*carts.q_Every_Hang_Dry_Item) AS waf7'))
                  ->where('pricings.sp_id', '=', $sp_id)->where('carts.id', '=' , $cart_id)->first();

$waftotal = $waf1->waf1 + $waf2->waf2 + $waf3->waf3 + $waf4->waf4 + $waf5->waf5 + $waf6->waf6 + $waf7->waf7 ;

В view.blade.php {{$ waftotal}} или {{$ waftotal-> waftotal}} выдает ошибку при попытке получить свойство необъекта.

Предложения будут оценены.

1 Ответ

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

first() вернет объект, поэтому вам нужно добавить свойства каждого объекта: https://laravel.com/docs/5.6/eloquent#retrieving-single-models

Вместо $total = $total_shirt + $total_pant + $total_tie;

Это будет $total = $total_shirt->total_shirt + $total_pant->total_pant + $total_tie->total_tie;, так как вы присвоили сумму каждому объекту свойству, названному в честь объекта.

Но ваш первый комбинированный запрос должен работать нормально. Какую ошибку вы получаете?

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