I have a Cart
model like this :
class Cart extends Model
{
protected $table = 'cart';
protected $fillable = ['user_id', 'delivery_method'];
public function products ()
{
return $this->belongsToMany(Product::class, 'cart_products', 'cart_id', 'product_id')->withPivot('quantity');
}
}
And cart table columns are :
id
user_id
delivery_method
created_at
updated_at
And there is a pivot table named cart_products
to relate Card
model to a Product
Model.
Suppose I have an specific $user_id
variable. now I want Cart with that user_id with their products. for that I wrote this :
$cartWithProducts = Cart::with('products')->where(['user_id' => $user_id])->first();
if (!$cartWithProducts->isEmpty()) {
//Some codes come here
}
But after run, I got this error :
Call to undefined method Illuminate\Database\Query\Builder::isEmpty() {"exception":"[object] (BadMethodCallException(code: 0): Call to undefined method Illuminate\\Database\\Query\\Builder::isEmpty() at D:\\wamp\\www\\barlly\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php:2461
I do not want to use lazy loading approach beacause n query problem. what is solution in this case?
Also each User can have only one Cart in time.
first()
returns null
if there is no Cart for the user, so if you want to check if it's empty, you can use is_null()
or empty()
instead of if (!$cartWithProducts)
to keep is readable:
if (is_null($cartWithProducts))
Expecting your can have multiple carts for specified users and you may proceed more than one I would recommend to do something like this:
$cartWithProducts = Cart::whereUserId($user_id)->with('products')->get();
if ($cartWithProducts->isNotEmpty()) {
//Some codes come here
}