«Попытка получить свойство« цена »не-объекта» - PullRequest
0 голосов
/ 23 декабря 2018

У меня установлен скрипт Laravel, теперь, когда пользователь заполняет новую форму заказа и делает заказ на заказ, будет отображаться: «Попытка получить свойство« цена »не-объекта» Ошибка для usercontroller иэта строка:

"$ цена = ($ запрос-> количество * $ servicePrice-> цена) / 1000;"

Этот код детали для нового заказа в usercontroller:

 public function newOrder()
{
    $categories = Category::where('status', 1)->orderBy('name')->get();
    return view('user.newOrder', compact('categories'));
}

public function getPack(Request $request)
{
    $items = Service::where('category_id', $request->id)->where('status', 1)->orderBy('name')->get();
    return $items;
}

public function getPackDetails(Request $request)
{
    $items = Service::findOrFail($request->id);
    return $items;
}

public function storeNewOrder(Request $request)
{
    $this->validate($request, [
        'category' => 'required',
        'service' => 'required',
        'link' => 'required',
        'quantity' => 'required',
    ]);

    $service = Service::where('category_id', $request->category)->where('id', $request->service)->first();
    $servicePrice = ServicePrice::where('category_id', $request->category)->where('service_id', $request->service)->where('user_id', Auth::id())->first();
    $item = new Order();
    $user = User::findOrFail(Auth::id());
    $transaction = new Transaction();
    if ($request->quantity >= $service->min && $request->quantity <= $service->max) {
        $price = ($request->quantity * $servicePrice->price) / 1000;
        if ($user->balance >= $price) {
            $item->category_id = $request->category;
            $item->service_id = $request->service;
            $item->user_id = Auth::id();
            $item->service_no = $service->service_id;
            $item->order_no = 0;
            $item->link = $request->link;
            $item->quantity = $request->quantity;
            $item->price = $price;
            $item->status = 'Pending';
            $item->start_counter = 0;
            $item->remains = $request->quantity;
            $item->order_through = 'Web';
            $item->save();

            $user->balance = $user->balance - $price;
            $user->save();

            $transaction->user_id = Auth::id();
            $transaction->amount = $price;
            $transaction->user_balance = $user->balance;
            $transaction->type = 1;
            $transaction->trx = str_random(12);
            $transaction->save();

            send_email($user->email, $user->name, 'Order Placed Successfully', 'Your ' . $request->quantity . ' ' . $service->name . ' has been placed successfully.');
            session()->flash('success', 'Order request send successfully');
            return back();
        } else {
            session()->flash('alert', 'Insufficient Balance');
            return back();
        }

    } else {
        session()->flash('alert', 'Quantity should be within ' . 
$service->min . ' to ' . $service->max);

        return back();
    }
}

1 Ответ

0 голосов
/ 23 декабря 2018

Скорее всего, проблема связана с этой строкой:

$servicePrice = ServicePrice::where('category_id', $request->category)->where('service_id', $request->service)->where('user_id', Auth::id())->first();

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

Это означает, что перед использованием $servicePrice вам необходимо проверить, содержит ли он что-либо:

if(!$servicePrice){ //same result: if($servicePrice == null) {
//`$servicePrice==null`, so you should handle the error here - throw an exception or return
}
//your code here
$servicePrice = ServicePrice::where('category_id', $request->category)->where('service_id', $request->service)->where('user_id', Auth::id())->first();

Кроме того, аутентифицированного пользователя можно получить непосредственно из:

$user = Auth::user();

Если посетитель не аутентифицирован, $user будет null по той же причине, что и предыдущий.

if(!$user){
//the user is NOT authenticated
} else {
//the user is authenticated
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...