Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"error": "array_merge(): Expected parameter 1 to be an array, null given"

when I am trying to create a new order this errors appears:

"error": "array_merge(): Expected parameter 1 to be an array, null given"

and here the whole function that I am trying to create a new order with it, I tried it like for 20 times and it worked fine, but after a time it stopped working with the above error

public function placeOrder()
    {
        $user_id = auth()->id();

        try {
            $cart = Cart::where('client_id', '=', $user_id)->first();

            $cartDetails = CartDetail::where('cart_id', '=', $cart->id)->get();
        }catch (Exception $e){
            return response()->json(["error" =>$e->getMessage()]);
        }

        try {
            foreach ($cartDetails as $cartDetail){
                $item = StoreItem::where('item_id', '=', $cartDetail->item_id)->first();
                $this->items_total += $cartDetail->quantity;
                $discountedPrice =  ($item->unit_price * $item->discount) / 100;
                $this->total_amount += $cartDetail->quantity * $discountedPrice;
            }
        }catch (Exception $e){
            return response()->json(["error" =>$e->getMessage()]);
        }

        if(count($cartDetails->toArray()) == 0){
            return response()->json(["warning" => "Please Add Cart Items"]);
        }

        $storeId = $cartDetails[0]->store_id;
        try {
            $store = Store::findOrFail($storeId);

            $address = Address::where('user_id', '=', $user_id)->where('is_default', '=', true)->first();
        }catch (Exception $e){
            return response()->json(["error" => $e->getMessage()]);
        }

        $delivery_charge = 2;

        $final_total = $this->total_amount + $delivery_charge;

        $address_id = $address->id;

        try {

            $data = [
                'items_total' => $this->items_total,
                'total_amount' => $this->total_amount,
                'is_paid' => false,
                'delivery_charge' => $delivery_charge,
                'shopper_earning' => $delivery_charge / 1.5,
                'final_total' => $final_total,
                'client_id' => $user_id,
                'store_id' => $store->id,
                'address_id' => $address_id,
                'currency_id' => $store->currency_id
            ];

            $createdOrder = Order::create($data);


            if ($createdOrder){
                foreach ($cartDetails as $cartDetail){
                    $cartDetail->delete();
                }
                event(new CartUpdated($cart->id, $user_id));
            }

            return response()->json(['success' => $createdOrder]);
        }catch (Exception $e){
            return response()->json(["error" =>$e->getMessage()]);
        }
    }

when I tried to debug it, the error is within the Order::create($data);

why this error appears?

EDIT:

Debug Console:

{
    "message": "array_merge(): Expected parameter 1 to be an array, null given",
    "exception": "ErrorException",
    "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php",
    "line": 78,
    "trace": [
        {
            "function": "handleError",
            "class": "Illuminate\\Foundation\\Bootstrap\\HandleExceptions",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php",
            "line": 78,
            "function": "array_merge"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php",
            "line": 64,
            "function": "getPayloadFromEvent",
            "class": "Illuminate\\Broadcasting\\BroadcastEvent",
            "type": "->"
        },
        {
            "function": "handle",
            "class": "Illuminate\\Broadcasting\\BroadcastEvent",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 33,
            "function": "call_user_func_array"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 36,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 91,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 592,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php",
            "line": 94,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Bus\\{closure}",
            "class": "Illuminate\\Bus\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php",
            "line": 98,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php",
            "line": 114,
            "function": "dispatchNow",
            "class": "Illuminate\\Bus\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 289,
            "function": "queue",
            "class": "Illuminate\\Broadcasting\\BroadcastManager",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 212,
            "function": "broadcastEvent",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Broadcasting/PendingBroadcast.php",
            "line": 57,
            "function": "dispatch",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 218,
            "function": "__destruct",
            "class": "Illuminate\\Broadcasting\\PendingBroadcast",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/app/Observers/OrderStatusObserver.php",
            "line": 15,
            "function": "broadcast"
        },
        {
            "function": "created",
            "class": "App\\Observers\\OrderStatusObserver",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 388,
            "function": "call_user_func_array"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php",
            "line": 218,
            "function": "Illuminate\\Events\\{closure}",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php",
            "line": 188,
            "function": "dispatch",
            "class": "Illuminate\\Events\\Dispatcher",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 886,
            "function": "fireModelEvent",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 728,
            "function": "performInsert",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
            "line": 767,
            "function": "save",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Support/helpers.php",
            "line": 433,
            "function": "Illuminate\\Database\\Eloquent\\{closure}",
            "class": "Illuminate\\Database\\Eloquent\\Builder",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
            "line": 768,
            "function": "tap"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php",
            "line": 23,
            "function": "create",
            "class": "Illuminate\\Database\\Eloquent\\Builder",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 1728,
            "function": "forwardCallTo",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
            "line": 1740,
            "function": "__call",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/app/Http/Controllers/Api/OrderController.php",
            "line": 108,
            "function": "__callStatic",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "::"
        },
        {
            "function": "placeOrder",
            "class": "App\\Http\\Controllers\\Api\\OrderController",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
            "line": 54,
            "function": "call_user_func_array"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 45,
            "function": "callAction",
            "class": "Illuminate\\Routing\\Controller",
            "type": "->"
        },
        {
            "file": "/home/sohaib/Desktop/Final-Project/Discounts/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 239,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },

this is about the half but I think its enough, so I created before a class called OrderStatusObserver, Honestly, I didn't know how this works, but this class contains this code:

<?php

namespace App\Observers;

use App\Events\OrderStatus;
use App\Order;

class OrderStatusObserver
{
    public function created(Order $order)
    {
       broadcast(new OrderStatus($order));
    }
}

this is my broadcastWith function in OrderStatus Event:

public function broadcastWith()
    {
        if($this->order->status == 'accepted'){
            return ['current_position' => 2, 'id' => $this->order->id];
        }elseif ($this->order->status == 'inprogress'){
            return ['current_position' => 3];
        }elseif ($this->order->status == 'onway'){
            return ['current_position' => 4];
        }elseif ($this->order->status == 'delivered'){
            return ['current_position' => 5];
        }
    }

and when I commented broadcast(new OrderStatus($order)); this line it works fine, so anyone knows what is the problem with this, hope anyone can help and sorry for my english

like image 593
Sohaib Avatar asked Jun 14 '26 04:06

Sohaib


1 Answers

The problem is because of broadCastWith So you should Return an array in this method. You have two problem.

1-in boradCastWith you only check the value of status, and there is no fallback code. so in this situation if your status not one of delivered,onway,inprogress,accepted you got a problem

public function broadcastWith()
{
    if($this->order->status == 'accepted'){
        return ['current_position' => 2, 'id' => $this->order->id];
    }elseif ($this->order->status == 'inprogress'){
        return ['current_position' => 3];
    }elseif ($this->order->status == 'onway'){
        return ['current_position' => 4];
    }elseif ($this->order->status == 'delivered'){
        return ['current_position' => 5];
    }

    return []; // this is a important line
}

Also note you may use switch case instead of elseif

2-You handle these 4 status probably because other type of status is not valid. So you should add validation. Also in your code you don't have any value for status, so you should add a default value for it. look at https://stackoverflow.com/a/39912500/1827594

like image 187
Ali Akbar Azizi Avatar answered Jun 15 '26 21:06

Ali Akbar Azizi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!