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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With