试图获取非对象的属性“参数”

时间:2019-07-29 08:21:06

标签: mysql json laravel laravel-5 eloquent

你好,我在Laravel中有一个api,我正在尝试从表列中获取值 Json已经在表json响应中响应了它,但是当我得到它时说:

  

试图获取非对象的属性“参数”

我对laravel陌生,所以我真的迷失了这个

调用api时使用的函数 转到

$parameter = $value->parameter;

然后停下来在PriceDetailHolder()中说:

  

试图获取非对象的属性“参数”

我展示了2个功能,因为我真的不知道问题出在哪里

public static function PriceDetailHolder($booking_prices, $booking_id = null, $currency = null): array
{
    if (!empty($booking_id) && $booking_id !== null) {
        /**
         * @var $booking Booking
         */
        $booking = Booking::query()->find($booking_id);
        $currency = $booking->CountryArea->Country->isoCode;
    }
    $holder[] = [
        'highlighted_text' => trans('admin.message665'),
        'highlighted_text_color' => '333333',
        'highlighted_style' => 'BOLD',
        'highlighted_visibility' => true,
        'small_text' => 'eee',
        'small_text_color' => '333333',
        'small_text_style' => '',
        'small_text_visibility' => false,
        'value_text' => trans('admin.message665'),
        'value_text_color' => '333333',
        'value_text_style' => '',
        'value_textvisibility' => false
    ];
    foreach ($booking_prices as $key => $value) {
        $code = '';
        if (!empty($value->code)) {
            $code = "({$value->code})";
        }
        $parameter = $value->parameter;
        /**
         * @var $parameterDetails PricingParameter
         */
        $parameterDetails = PricingParameter::query()->find($parameter);
        if ($parameterDetails === null) {
            $prameterName = $parameter;
        } else {
            if ((int)$parameterDetails->parameterType === 13) {
                $applicable = (int)$parameterDetails->applicable === 1 ? trans('api.message174') : trans('api.message175');
                /**
                 * @var $priceCardValue PriceCardValue
                 */
                $priceCardValue = PriceCardValue::query()->where([['price_card_id', '=', $value->price_card_id], ['pricing_parameter_id', '=', $parameter]])->first();
                $code = "($priceCardValue->parameter_price %)\n" . $applicable;
            }
            $prameterName = $parameterDetails->ParameterApplication . $code;
        }
        $holder[] = [
            'highlighted_text' => $prameterName,
            'highlighted_text_color' => '333333',
            'highlighted_style' => 'NORMAL',
            'highlighted_visibility' => true,
            'small_text' => 'eee',
            'small_texot_clor' => '333333',
            'small_text_style' => '',
            'small_text_visibility' => false,
            'value_text' => $currency . ' ' . $value->amount,
            'value_text_color' => '333333',
            'value_text_style' => '',
            'value_textvisibility' => true
        ];

    }
    return $holder;
}





public function End(EndTripRequest $request)
    {
        $merchant_id = $request->user('api-driver')->merchant_id;
        $validator = Validator::make($request->all(), [
            'booking_id' => [
                'required',
                'integer',
                Rule::exists('bookings', 'id')->where(static function ($query) {
                    $query->where('booking_status', TripStatus::STARTED);
                }),
            ],
            'latitude' => 'required',
            'longitude' => 'required',
            'tip_amount' => 'nullable|numeric',
        ]);
        if ($validator->fails()) {
            $errors = $validator->messages()->all();
            return response()->json(['result' => '0', 'message' => $errors[0], 'data' => []]);
        }
        /**
         * @var $configuration BookingConfiguration
         */
        $configuration = BookingConfiguration::query()->where('merchant_id', $merchant_id)->first();
        $booking_id = $request->booking_id;
        /**
         * @var $booking Booking
         */
        $booking = Booking::with('PriceCard')->find($booking_id);
        /**
         * @var $bookingDetails BookingDetail
         */
        $bookingDetails = BookingDetail::booking($booking_id)->first();
        $service_type_id = (int)$booking->service_type_id;
        if (!in_array($service_type_id, [1, 5], false)) {
            $start_meter_value = $bookingDetails->start_meter_value;
            $customMessages = [
                'gt' => trans_choice('api.endmeter', 3, ['value' => $start_meter_value]),
            ];
            $validator = Validator::make($request->all(), [
                'send_meter_image' => 'required',
                'send_meter_value' => 'required|integer|gt:' . $start_meter_value,
            ], $customMessages);
            if ($validator->fails()) {
                $errors = $validator->messages()->all();
                return response()->json(['result' => '0', 'message' => $errors[0], 'data' => []]);
            }
        }
        $request->user('api-driver')->free_busy = 2;
        $request->user('api-driver')->total_trips += 1;
        $request->user('api-driver')->save();
        /**
         * @var $user \App\User
         */
        $user = $booking->User;
        ++$user->total_trips;
        $user->save();
        if ($request->hasFile('send_meter_image')) {
            $bookingDetails->end_meter_value = $request->send_meter_value;
            $request->file('send_meter_image');
            $send_meter_image = $request->send_meter_image->store('service');
            $bookingDetails->end_meter_image = $send_meter_image;
        }
        $pricing_type = $booking->PriceCard->pricing_type;
        $price_card_id = $booking->price_card_id;
        $key = $configuration->google_key;
        $endAddress = GoogleController::GoogleLocation($request->latitude, $request->longitude, $key);
        $endAddress = $endAddress ?: 'Address Not found';
        $endTimeStamp = time();
        $bookingDetails->end_timestamp = $endTimeStamp;
        $bookingDetails->end_latitude = $request->latitude;
        $bookingDetails->end_longitude = $request->longitude;
        $bookingDetails->end_location = $endAddress;
        $bookingDetails->accuracy_at_end = $request->accuracy;
        $bookingDetails->save();
        $start_timestamp = $bookingDetails->start_timestamp;
        $seconds = $endTimeStamp - $start_timestamp;
        $hours = floor($seconds / 3600);
        $mins = floor($seconds / 60 % 60);
        //$secs = floor($seconds % 60);
        $timeFormat = sprintf('%02d H %02d M', $hours, $mins);
        $rideTime = round(abs($endTimeStamp - $start_timestamp) / 60, 2);
        $from = $bookingDetails->start_latitude . ',' . $bookingDetails->start_longitude;
        $to = $request->latitude . ',' . $request->longitude;
        $coordinates = '';
        $bookingData = new BookingDataController();
        $bookingData->ActivateRefer($booking->id);

        /**
         * Calculate the distance based on service type.
         */
        switch ($service_type_id) {
            case '1':
                $bookingcoordinates = BookingCoordinate::query()->where('booking_id', $request->booking_id)->first();
                $pick = $booking->pickup_latitude . ',' . $booking->pickup_longitude;
                $drop = $booking->drop_latitude . ',' . $booking->drop_longitude;
                $distanceCalculation = new DistanceCalculation();
                $distance = $distanceCalculation->distance($from, $to, $pick, $drop, $bookingcoordinates['coordinates'], $merchant_id, $key);
                $distance = round($distance);
                $coordinates = $bookingcoordinates['coordinates'];
                break;
            case '5':
                $distance = GoogleController::GoogleShortestPathDistance($from, $to, $key);
                $distance = round($distance);
                break;
            default:
                $distance = $bookingDetails->end_meter_value - $bookingDetails->start_meter_value;
                $distance *= 1000;
        }

        /**
         * Calculate Trip Amount based on Pricing Type
         */
        switch ($pricing_type) {
            case '1':
            case '2':

                $newArray = PriceController::CalculateBill($price_card_id, $distance, $rideTime, $booking_id, $bookingDetails->wait_time, (double)$bookingDetails->dead_milage_distance, (double)$booking->User->outstanding_amount);

                /**
                 * Check if trip went through a toll gate
                 */
                if (!empty($configuration->toll_api)) {
                    $newTool = new Toll();
                    $toolPrice = $newTool->checkToll($configuration->toll_api, $from, $to, $coordinates, $configuration->toll_key);
                    if (is_array($toolPrice) && array_key_exists('cost', $toolPrice) && $toolPrice['cost'] > 0) {
                        $parameter[] = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'TollCharges', 'amount' => sprintf('%0.2f', $toolPrice['cost']), 'type' => 'CREDIT', 'code' => ''];
                        $newArray[] = $parameter;
                    }
                }
                $newExtraCharge = new ExtraCharges();
                $carditnewArray = array_filter($newArray, static function ($e) {
                    return ($e['type'] === 'CREDIT');
                });
                $amount = array_sum(Arr::pluck($carditnewArray, 'amount'));
                if ($booking->number_of_rider > 1) {
                    $amount += $booking->PriceCard->extra_sheet_charge;
                }
                $booking_time = (int)$booking->booking_type === BookingType::RIDE_NOW ? $booking->created_at->toTimeString() : $booking->later_booking_time;
                $timeCharge = $newExtraCharge->NightChargeEstimate($price_card_id, $booking_id, $amount, $booking_time);
                if (!empty($timeCharge)) {
                    $charge = array_sum(Arr::pluck($timeCharge, 'amount'));
                    $amount += $charge;
                    $newArray = array_merge($newArray, $timeCharge);
                }

                /**
                 * Check and calculate surge price
                 */
                if ((int)$booking->PriceCard->sub_charge_status === 1) {
                    $surge = (int)$booking->PriceCard->sub_charge_type === 1 ? $booking->PriceCard->sub_charge_value : bcdiv($amount, $booking->PriceCard->sub_charge_value, 2);
                    $amount += $surge;
                    $parameter = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'Surge-Charge', 'amount' => sprintf('%0.2f', $surge), 'type' => 'CREDIT', 'code' => ''];
                    $newArray[] = $parameter;
                }
                $discoutArray = array_filter($newArray, static function ($e) {
                    return ($e['type'] === 'DEBIT');
                });

                /**
                 * Check if there's a promo code applied to this booking
                 */
                if (!empty($discoutArray)) {
                    $promoDiscount = sprintf('%0.2f', array_sum(Arr::pluck($discoutArray, 'amount')));
                    $bookingDetails->promo_discount = $promoDiscount;
                    $amount = $amount > $promoDiscount ? $amount - $promoDiscount : '0.00';
                } else {
                    $bookingDetails->promo_discount = '0.00';
                }

                /**
                 * Check if a driver or user is referee
                 */
                $referDiscount = $bookingData->Refer($booking->user_id);
                if ($referDiscount !== NULL) {
                    switch ($referDiscount->offer_type) {
                        case '1':
                            $referAmount = $amount;
                            $amount = 0;
                            break;
                        case '2':
                            $referAmount = ($amount * $referDiscount->referral_offer_value) / 100;
                            $amount -= $referAmount;
                            break;
                        case '3':
                            $referAmount = $referDiscount->referral_offer_value;
                            $amount = $amount < $referAmount ? 0 : $amount - $referAmount;
                            break;
                        default:
                            $referAmount = 0;
                            break;
                    }
                    $parameter[] = ['price_card_id' => $price_card_id, 'booking_id' => $booking_id, 'parameter' => 'Promotion', 'amount' => sprintf('%0.2f', $referAmount), 'type' => 'DEBIT', 'code' => ''];
                    array_push($newArray, $parameter);
                }
                $billDetails = json_encode($newArray);
                $bookingDetails->total_amount = sprintf('%0.2f', $amount);
                $payment = new Payment();
                if ($amount > 0) {
                    $payment->MakePayment($booking->id, $booking->payment_method_id, $amount, $booking->user_id, $booking->card_id);
                } else {
                    $payment->UpdateStatus($booking->id);
                }
                $bookingDetails->bill_details = $billDetails;
                $bookingDetails->save();
                \App\Http\Controllers\Helper\CommonController::Commission($booking_id, $amount);
                if ($booking->User->outstanding_amount) {
                    User::query()->where('id', $booking->user_id)->update(['outstanding_amount' => NULL]);
                }
                break;
            case '3':
                $amount = '';
                break;
            default:
                $amount = '';
                break;
        }
        if ($service_type_id === 5) {
            $poolRide = new PoolController();
            $poolRide->DropPool($booking, $request);
        }
        $distance = round($distance / 1000, 2) . ' Km';
        $booking->booking_status = TripStatus::COMPLETED;
        $booking->travel_distance = $distance;
        $booking->travel_time = $timeFormat;
        $booking->travel_time_min = $rideTime;
        $booking->final_amount_paid = sprintf('%0.2f', $amount);
        $booking->save();
        $user_id = $booking->user_id;
        $message = 'Driver End Ride';
        $userdevices = UserDevice::getLastDevice($booking->user_id);
        $playerids = [$userdevices->player_id];
        $data = $bookingData->BookingNotification($booking);
        Onesignal::UserPushMessage($playerids, $data, $message, 1, $booking->merchant_id);
        return response()->json(['result' => '1', 'message' => trans('api.message15'), 'data' => $booking]);
    }

它来自表格

[{"price_card_id":3,"booking_id":"42540","parameter":1,"amount":"1.50","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":2,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":3,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":4,"amount":"0.00","type":"CREDIT","code":""},{"price_card_id":3,"booking_id":"42540","parameter":5,"amount":"0.00","type":"DEBIT","code":""},[{"price_card_id":3,"booking_id":"42540","parameter":"Promotion","amount":10,"type":"DEBIT","code":""}]]

如果我错了,请告诉我任何事情,我为我在所有这些方面的知识不足而感到抱歉,但我只是第一步学习

1 个答案:

答案 0 :(得分:1)

因此,快速浏览一下您的代码,失败的代码是$value->parameter

该值来自$booking_prices,因此问题出在迭代booking_prices不具有属性parameter时返回的对象中。

您可以通过执行$parameter = $value->parameter ?? null; // null as default value或找出为什么parameter属性并不总是存在的原因来消除错误。