Skip to content

CartItem Model

Individual items within a shopping cart.

Overview

The CartItem model represents a single product entry in a shopping cart. It tracks quantity, pricing, prescription status, and product snapshot data for each item in the cart.

Attributes

AttributeTypeDescription
idintPrimary key
cart_idintForeign key to Cart
product_idintForeign key to Product
purse_idintForeign key to Purse (optional)
quantityintItem quantity
unit_priceintPrice per unit in cents
total_priceintTotal price in cents
product_snapshotjsonProduct data snapshot
notesstringAdditional notes
requires_prescriptionbooleanPrescription required flag
prescription_statusstringPrescription approval status
created_attimestampCreation timestamp
updated_attimestampLast update timestamp

Relationships

Belongs To

  • belongsTo(Cart) - Associated cart
  • belongsTo(Product) - Associated product
  • belongsTo(PurseItem) - Associated purse item for payment

Key Features

Price & Quantity

  • Tracks quantity and pricing per item
  • Calculates total price
  • Price formatting accessors

Prescription Management

  • Tracks prescription requirement per item
  • Tracks prescription approval status
  • Prescription-related scopes

Product Snapshot

  • Stores product data at time of addition
  • Ensures cart accuracy even if product changes

Purse Item Association

  • Links cart items to specific purse items for payment allocation
  • Provides category information for UI display
  • Enables filtering and grouping by payment source

Usage Examples

Adding an Item to Cart

php
$cartItem = CartItem::create([
    'cart_id' => $cart->id,
    'product_id' => $product->id,
    'purse_id' => $purseItem->id, // Optional: specify which purse item to use
    'quantity' => 2,
    'unit_price' => $product->price,
    'total_price' => $product->price * 2,
    'product_snapshot' => $product->toArray(),
    'requires_prescription' => $product->requires_prescription,
    'prescription_status' => 'pending',
]);

Getting Associated Data

php
// Get cart
$cart = $cartItem->cart;

// Get product
$product = $cartItem->product;

// Get purse item and category
$purseItem = $cartItem->purseItem;
$categoryName = $cartItem->purse_category_name;

Price Formatting

php
$formattedUnitPrice = $cartItem->formatted_unit_price;
$formattedTotalPrice = $cartItem->formatted_total_price;

Prescription Status

php
// Get prescription status
$status = $cartItem->prescription_status;

// Update status
$cartItem->prescription_status = 'approved';
$cartItem->save();

Scopes

Prescription Items

php
// Get items requiring prescription
CartItem::where('requires_prescription', true)->get();

By Cart

php
// Get items for a specific cart
CartItem::where('cart_id', $cartId)->get();