Если вам нужен совет, я бы предложил несколько небольших изменений, чтобы сделать ваш код более понятным:
1) Модели
Пользователь
A User
имеет Cart
/**
* A User has a cart.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function cart()
{
return $this->hasOne(Cart::class);
}
Корзина
A Cart
принадлежит User
A Cart
имеет много Product
s
/**
* A Cart belongs to a User.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function cart()
{
return $this->belongsTo(User::class);
}
/**
* A Cart has many Products.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function products()
{
return $this->belongsToMany(Product::class)->withPivot(['quantity']);
}
A Product
может быть много Cart
s
/**
* A Product can be in many Carts.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function products()
{
return $this->belongsToMany(Cart::class)->withPivot(['quantity']);
}
2) Отношения
С вашими моделями, настроенными таким образом, вы теперь можете получить доступ к своим данным следующим образом:
// Load a user with all their carts and products
$user = User::with(['carts.products])->find(1);
// Get a specfic cart
$cart = $user->carts->first();
// Get the products in their cart
$products = $cart->products;
// Get quantity of the first product in the cart
$quantity = $products->first()->pivot->quantity;
Теперь все это только основы c пример, но демонстрация того, что вы можете сделать с несколькими отношениями и Pivot
моделями и атрибутами.