Product
A product
A product represents a sellable item in WHMCS. The property object models a product's properties and configuration. It stores billing, contact, inventory, resource overage tracking, and 24 custom fields available to third party modules.
Ordering a product creates a WHMCS\Service\Service object, which is
available for use by the client.
Traits
Constants
| TYPE_SHARED | 
 | 
| TYPE_RESELLER | 
 | 
| TYPE_SERVERS | 
 | 
| TYPE_OTHER | 
 | 
| PAYMENT_FREE | 
 | 
| PAYMENT_ONETIME | 
 | 
| PAYMENT_RECURRING | 
 | 
| AUTO_SETUP_ORDER | 
 | 
| AUTO_SETUP_PAYMENT | 
 | 
| AUTO_SETUP_ACCEPT | 
 | 
| AUTO_SETUP_DISABLED | 
 | 
| DEFAULT_EMAIL_TEMPLATES | 
 | 
Properties summary
| Type | Property | Description | |
|---|---|---|---|
| protected | $table | ||
| protected | $moduleField | ||
| protected | $columnMap | ||
| protected | $booleans | ||
| protected | $strings | ||
| protected | $ints | ||
| protected | $commaSeparated | ||
| protected | $casts | ||
| protected | $appends | ||
| protected | $pricingCache | ||
| int | $id | A product's unique id number. | |
| string | $type | A product's type, either "hostingaccount", "reselleraccount", "server", or "other". | |
| int | $productGroupId | The id of group a product belongs to. | |
| string | $name | A product's name. | |
| string | $description | A product's description. Some order form templates may render structured data in a product's description. | |
| string | $shortDescription | A product's short description. | |
| string | $tagline | A product's tagline. | |
| string | $color | A product's associated color. | |
| bool | $isHidden | Whether or not to display a product in shopping cart modules. | |
| bool | $showDomainOptions | Whether or not the shopping cart should require a domain be purchased, transferred, or supplied (if already owned) to a product. | |
| int | $welcomeEmailTemplateId | ID number of welcome email template sent to customers when this product is activated. | |
| bool | $stockControlEnabled | Whether or not a product has limited stock which must be monitored. | |
| int | $quantityInStock | A product's currently available quantity, if stock control is enabled. | |
| bool | $proRataBilling | Whether or not a product uses pro rata billing instead of standard month-to-month | |
| int | $proRataChargeDayOfCurrentMonth | The day of the month upon which pro rata billing should charge on. | |
| int | $proRataChargeNextMonthAfterDay | The day of the month after which the following month will also be included on the first invoice. | |
| string | $paymentType | A product's payment type, either "recurring", "onetime", or "free". | |
| int | $allowMultipleQuantities | Whether or not customers may specify if they want more than one of this item when purchasing. | |
| string[] | $freeSubDomains | The domains a client can select for a free sub-domain. | |
| string | $autoSetup | When provisioning a product should take place, either "order", "payment", "on", or "". | |
| string | $module | The name of the module used to provision a product. | |
| int | $serverGroupId | The id number of server group a product should be provisioned to. | |
| string | $moduleConfigOption1 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption2 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption3 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption4 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption5 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption6 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption7 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption8 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption9 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption10 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption11 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption12 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption13 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption14 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption15 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption16 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption17 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption18 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption19 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption20 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption21 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption22 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption23 | Modules may use this field to store module specific configuration. | |
| string | $moduleConfigOption24 | Modules may use this field to store module specific configuration. | |
| string | $freeDomain | Whether purchasing a product provisions a free domain name, either "once", "on", or "". | |
| string[] | $freeDomainPaymentTerms | The payment terms a product must be purchased with to be provisioned with a free domain name, anything from the set "onetime", "monthly", "quarterly", "semiannually", "annually", "biennially", and "triennially". | |
| string[] | $freeDomainTlds | The top-level domains that are available for use with a product's free domain. | |
| int | $recurringCycleLimit | The number of billing cycles a product may automatically renew. | |
| int | $daysAfterSignUpUntilAutoTermination | The number of days after sign up before a product is automatically terminated. | |
| int | $autoTerminationEmailTemplateId | The id of the email to send to a client when a product is automatically terminated. | |
| bool | $allowConfigOptionUpgradeDowngrade | Whether or not a product's configurable options can be upgraded and downgraded. | |
| int | $upgradeEmailTemplateId | The id of the email to send to a client when a product's options are upgraded. | |
| array | $enableOverageBillingAndUnits | An array whose first value is true if overages are enabled. Its second value is the unit to use for a product's disk usage limits, either "MB", "GB", or "TB". Its third value is the unit to use for a product's bandwidth usage limits, either "MB", "GB", or "TB". | |
| int | $overageDiskLimit | The soft limit of a product's allowed disk usage to this number of units configured in enableOverageBillingAndUnits. | |
| int | $overageBandwidthLimit | The soft limit of a product's allowed bandwidth usage to this number of units configured in enableOverageBillingAndUnits. | |
| float | $overageDiskPrice | The price to charge per unit configured in enableOverageBillingAndUnits for a product's disk usage above the soft limit configured in overageDiskLimit. | |
| float | $overageBandwidthPrice | The price to charge per unit configured in enableOverageBillingAndUnits for a product's bandwidth usage above the soft limit configured in overageBandwidthLimit. | |
| bool | $applyTax | Whether or not tax should be applied to a product. | |
| bool | $affiliatePayoutOnceOnly | Whether or not affiliates should only be paid on a product once, even if it's a recurring product. | |
| string | $affiliatePaymentType | The type of payment available for affiliates that successfully promote a product, either "percentage", "fixed", "none", or "" (the default payout method). | |
| float | $affiliatePaymentAmount | The percent or fixed amount which should be paid to affiliates. | |
| int | $displayOrder | The order in which to display a product in its group. | |
| bool | $isRetired | Whether or not a product is retired and should no longer be sold. | |
| bool | $isFeatured | Whether or not a product is displayed more prominently in its product group. | |
| Carbon | $createdAt | The date a product was created. | |
| Carbon | $updatedAt | The date a product was last updated. | |
| Group | $productGroup | The group a product belongs to. | |
| Template | $welcomeEmailTemplate | The email to send to a client when a product is ordered. | |
| Template | $autoTerminationEmailTemplate | The email to send to a client when a product is automatically terminated. | |
| Template | $upgradeEmailTemplate | The email to send to a client when a product's options are upgraded. | |
| Collection|Download[] | $productDownloads | A product's associated downloadable files. | |
| Collection|Product[] | $upgradeProducts | Products which a product can be upgraded or downgraded to. | |
| Collection|Service[] | $services | The services provisioned from a product. | |
| Collection|CustomField[] | $customFields | The custom fields for a product. | |
| Collection|DynamicTranslation[] | $translatedNames | ||
| Collection|DynamicTranslation[] | $translatedDescriptions | ||
| Collection|UsageItem[] | $metrics | ||
| Collection|UsageItem[] | $enabledMetrics | Usage Metrics that are enabled | |
| Collection|UsageItem[] | $billedMetrics | ||
| BelongsToMany|EmailMarketer[] | $emailMarketerRules | ||
| Collection|ModuleConfiguration[] | $moduleConfiguration | The module configuration for the product. | |
| BelongsToMany|EventAction[] | $eventActions | ||
| Collection|Product[] | $recommendations | All recommendations shown when ordering the product. | |
| Relation|Slug[] | $slugs | All slugs for the product | |
| Relation|Slug[] | $inactiveSlugs | All previous slugs for the product | |
| Relation|Slug | $activeSlug | The current active slug for the product | |
| Relation|OnDemandRenewal | $overrideOnDemandRenewal | Override On-demand renewal settings | |
| array | $formattedProductFeatures | 
Methods summary
| Return Type | Method Name | Description | |
|---|---|---|---|
| static | boot() | - | |
| BelongsTo | productGroup() | A product belongs to a product group. | |
| HasOne | welcomeEmailTemplate() | A product has one welcome email template. | |
| HasOne | autoTerminationEmailTemplate() | A product has one auto termination email template. | |
| HasOne | upgradeEmailTemplate() | A product has one upgrade email template. | |
| BelongsToMany | productDownloads() | A product has many downloads. | |
| BelongsToMany | upgradeProducts() | A product has many upgrade packages. | |
| HasMany | services() | A product can have many service instances of that product. | |
| HasMany | customFields() | - | |
| Builder | scopeVisible(Builder $query) | Filter for only non-hidden products. | |
| Builder | scopeSorted($query) | Sort by display order. | |
| int[] | getDownloadIds() deprecated | Retrieve a list of the ids of the downloads associated with a product. | |
| int[] | getUpgradeProductIds() deprecated | Retrieve a list of the ids of the upgrade products associated with a product. | |
| array | getAvailableBillingCycles() | Get available billing cycles for product. | |
| Pricing | pricing(array|null $currency = null) | Get available cycles and pricing for product. | |
| string | getNameAttribute(string $name) | Get the product name - this will override the output from the db value if set in Lang. | |
| string | getDescriptionAttribute(string $description) | Get the product description - this will override the output from the db value if set in Lang. | |
| string | getTaglineAttribute(string $tagline) | - | |
| string | getShortDescriptionAttribute(string $shortDescription) | - | |
| void | setShortDescriptionAttribute(string $shortDescription) | Set the products short description | |
| HasMany|DynamicTranslation[] | translatedNames() | Return the translated names for the specific product | |
| HasMany|DynamicTranslation[] | translatedDescriptions() | Return the translated names for the specific product | |
| static string | getProductName(int $productId, string $fallback = '', string $language = null) | Obtain the product name for the current language, passed language or fallback to the currently defined value for the product. | |
| static string | getProductDescription(int $productId, string $fallback = '', string $language = null) | Obtain the product description for the current language, passed language or fallback to the currently defined value for the product. | |
| assignMatchingMarketConnectAddons(array $addons) | - | ||
| bool | isFree() | Is product a free product. | |
| bool | isOneTime() | Is product a one time product. | |
| Builder | scopeIsNotRetired(Builder $query) | - | |
| Builder | scopeIsRetired(Builder $query) | - | |
| Builder | scopeOfModule(Builder $query, string $module) | - | |
| string | getProductKeyAttribute(string $value) | Get product key attribute for the current product entity. | |
| bool | isMarketConnectProduct() | Is this a MarketConnect product? | |
| string | getServiceKeyAttribute(string $value) | Get service key attribute for the current product entity. | |
| bool | isValidForUpgrade(Product $product) | Validate a given product is a valid upgrade candidate. | |
| array | getFormattedProductFeaturesAttribute() | - | |
| getBilledMetricsAttribute() | - | ||
| HasMany | metrics() | - | |
| HasMany | enabledMetrics() | Usage metrics that are enabled | |
| BelongsToMany | recommendations() | - | |
| emailMarketerRules() | - | ||
| int | getClientStockLevel() | - | |
| HasMany | moduleConfiguration() | - | |
| ModuleConfiguration | getModuleConfigurationSetting(string $settingName) | - | |
| HasMany | eventActions() | - | |
| Product | duplicate(string $newProductName) | Duplicate a Product along with all corresponding attributes | |
| Relation | slugs() | - | |
| Relation | inactiveSlugs() | - | |
| Relation | activeSlug() | - | |
| bool | validateSlugIsUnique(string $slug) | - | |
| Builder | getExistingSlugCheck(string $slug) | - | |
| createSlug() | - | ||
| string | getRoutePath() | - | |
| array | getRouteParts() | - | |
| string | getOrderLineItemProductGroupName() | - | |
| HasOne | overrideOnDemandRenewal() | On-demand renewal override settings if not null | |
| Product | overridingOnDemandRenewal(bool $enable, int $monthly, int $quarterly, int $semiannually, int $annually, int $biennially, int $triennially) | Override on-demand renewal settings | 
Details
                static            
    boot ()
        
    
    
                            BelongsTo
    productGroup ()
        
    
    A product belongs to a product group.
                            HasOne
    welcomeEmailTemplate ()
        
    
    A product has one welcome email template.
                            HasOne
    autoTerminationEmailTemplate ()
        
    
    A product has one auto termination email template.
                            HasOne
    upgradeEmailTemplate ()
        
    
    A product has one upgrade email template.
                            BelongsToMany
    productDownloads ()
        
    
    A product has many downloads.
                            BelongsToMany
    upgradeProducts ()
        
    
    A product has many upgrade packages.
                            HasMany
    services ()
        
    
    A product can have many service instances of that product.
Services are what associate products with clients.
                            HasMany
    customFields ()
        
    
    
                            Builder
    scopeVisible (Builder $query)
        
    
    Filter for only non-hidden products.
                            Builder
    scopeSorted ($query)
        
    
    Sort by display order.
                            int[]
    getDownloadIds ()
        deprecated
    
    deprecated
Retrieve a list of the ids of the downloads associated with a product.
                            int[]
    getUpgradeProductIds ()
        deprecated
    
    deprecated
Retrieve a list of the ids of the upgrade products associated with a product.
                            array
    getAvailableBillingCycles ()
        
    
    Get available billing cycles for product.
                            Pricing
    pricing (array|null $currency = null)
        
    
    Get available cycles and pricing for product.
                            string
    getNameAttribute (string $name)
        
    
    Get the product name - this will override the output from the db value if set in Lang.
                            string
    getDescriptionAttribute (string $description)
        
    
    Get the product description - this will override the output from the db value if set in Lang.
                            string
    getTaglineAttribute (string $tagline)
        
    
    
                            string
    getShortDescriptionAttribute (string $shortDescription)
        
    
    
                            void
    setShortDescriptionAttribute (string $shortDescription)
        
    
    Set the products short description
                            HasMany|DynamicTranslation[]
    translatedNames ()
        
    
    Return the translated names for the specific product
                            HasMany|DynamicTranslation[]
    translatedDescriptions ()
        
    
    Return the translated names for the specific product
                static            string
    getProductName (int $productId, string $fallback = '', string $language = null)
        
    
    Obtain the product name for the current language, passed language or fallback to the currently defined value for the product.
                static            string
    getProductDescription (int $productId, string $fallback = '', string $language = null)
        
    
    Obtain the product description for the current language, passed language or fallback to the currently defined value for the product.
                            
    assignMatchingMarketConnectAddons (array $addons)
        
    
    
                            bool
    isFree ()
        
    
    Is product a free product.
                            bool
    isOneTime ()
        
    
    Is product a one time product.
                            Builder
    scopeIsNotRetired (Builder $query)
        
    
    
                            Builder
    scopeIsRetired (Builder $query)
        
    
    
                            Builder
    scopeOfModule (Builder $query, string $module)
        
    
    
                            string
    getProductKeyAttribute (string $value)
        
    
    Get product key attribute for the current product entity.
                            bool
    isMarketConnectProduct ()
        
    
    Is this a MarketConnect product?
                            string
    getServiceKeyAttribute (string $value)
        
    
    Get service key attribute for the current product entity.
                            bool
    isValidForUpgrade (Product $product)
        
    
    Validate a given product is a valid upgrade candidate.
For MarketConnect, validates upgrade product service key matches current product key.
                            array
    getFormattedProductFeaturesAttribute ()
        
    
    
                            
    getBilledMetricsAttribute ()
        
    
    
                            HasMany
    metrics ()
        
    
    
                            HasMany
    enabledMetrics ()
        
    
    Usage metrics that are enabled
                            BelongsToMany
    recommendations ()
        
    
    
                            
    emailMarketerRules ()
        
    
    
                            int
    getClientStockLevel ()
        
    
    
                            HasMany
    moduleConfiguration ()
        
    
    
                            ModuleConfiguration
    getModuleConfigurationSetting (string $settingName)
        
    
    
                            HasMany
    eventActions ()
        
    
    
                            Product
    duplicate (string $newProductName)
        
    
    Duplicate a Product along with all corresponding attributes
                            Relation
    slugs ()
        
    
    
                            Relation
    inactiveSlugs ()
        
    
    
                            Relation
    activeSlug ()
        
    
    
                            bool
    validateSlugIsUnique (string $slug)
        
    
    
                            Builder
    getExistingSlugCheck (string $slug)
        
    
    
                            
    createSlug ()
        
    
    
                            string
    getRoutePath ()
        
    
    
                            array
    getRouteParts ()
        
    
    
                            string
    getOrderLineItemProductGroupName ()
        
    
    
                            HasOne
    overrideOnDemandRenewal ()
        
    
    On-demand renewal override settings if not null
                            Product
    overridingOnDemandRenewal (bool $enable, int $monthly, int $quarterly, int $semiannually, int $annually, int $biennially, int $triennially)
        
    
    Override on-demand renewal settings