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
| Attribute | Type | Description |
|---|---|---|
id | int | Primary key |
cart_id | int | Foreign key to Cart |
product_id | int | Foreign key to Product |
purse_id | int | Foreign key to Purse (optional) |
quantity | int | Item quantity |
unit_price | int | Price per unit in cents |
total_price | int | Total price in cents |
product_snapshot | json | Product data snapshot |
notes | string | Additional notes |
requires_prescription | boolean | Prescription required flag |
prescription_status | string | Prescription approval status |
created_at | timestamp | Creation timestamp |
updated_at | timestamp | Last update timestamp |
Relationships
Belongs To
belongsTo(Cart)- Associated cartbelongsTo(Product)- Associated productbelongsTo(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();