Skip to main content
Collections group products together for storefront categories, promotions, and other purposes.

Overview

Collections provide a flexible way to group products together for any purpose: storefront categories, hero sliders, landing page features, seasonal promotions, or any other grouping a store requires. Products can be added to a collection explicitly or filtered by criteria, and collections can be nested to form a hierarchy. Each collection belongs to a collection group, allowing different sets of collections to be maintained independently for different parts of a storefront.

Collection Groups

Collection groups act as top-level containers for collections. A store might have separate groups for a main catalog, seasonal promotions, or landing page features.

Fields

Relationships

Creating a collection group

Collections

Fields

Relationships

Scopes

Creating a collection

Lunar internally expects a name attribute on collection attribute data. It must be present in the attributes, otherwise the admin panel may throw unexpected errors.

Nested Collections

Collections form a tree hierarchy using the kalnoy/nestedset package. Child collections can be added using the appendNode method:
This produces the following hierarchy:
At least one root (parent) collection must exist before child collections can be created. This is important when using seeders to set up the initial catalog state.
The breadcrumb accessor returns the translated names of all ancestor collections, which is useful for building breadcrumb navigation:

Querying the tree

The nested set package provides many methods for working with the tree. Here are some common examples:
Refer to the kalnoy/nestedset documentation for the full API.

Products

Products are associated using a BelongsToMany relationship with a position pivot column for ordering.

Adding products

Sorting products

The sort field on a collection determines how products are ordered. Lunar ships with the following sort options: When a collection is updated, Lunar automatically dispatches the UpdateProductPositions job to reorder products based on the current sort setting.

Channels

Collections use the HasChannels trait, enabling channel-based availability with optional scheduling. See Channels for full details.

Querying by channel

Customer Groups

Collections use the HasCustomerGroups trait, enabling customer group visibility with optional scheduling. See Customers for full details.

Querying by customer group

URLs

Collections use the HasUrls trait, which automatically generates URLs when a collection is created.
See URLs for full details on managing URLs.

Media

Collections use the HasMedia trait (via Spatie Media Library), allowing images and other media to be attached.

Deletion Behavior

Collections use soft deletes. When a collection is deleted, all related pivot data is automatically detached:
  • Products
  • Channels
  • URLs (hard deleted)
  • Customer groups
  • Discounts