NAME

Interchange6::Schema::ResultSet::Product

SYNOPSIS

Provides extra accessor methods for Interchange6::Schema::Result::Product

METHODS

See also DBIx::Class::Helper::ResultSet::Shortcut which is loaded by this result set.

active

Returns all rows where "active" in Interchange6::Schema::Result::Product is true.

canonical_only

Returns all rows where "canonical_sku" in Interchange6::Schema::Result::Product is null, i.e. only canonical products.

listing

This is just a shortcut for:

$self->columns( [ 'sku', 'name', 'uri', 'price', 'short_description' ] )
    ->with_average_rating
    ->with_lowest_selling_price
    ->with_highest_price
    ->with_quantity_in_stock
    ->with_variant_count

Though in addition if you pass in arguments these are passed through to the appropriate with_* method so you can do:

$self->listing({ quantity => 10 })

And the result will be:

$self->columns( [ 'sku', 'name', 'uri', 'price', 'short_description' ] )
    ->with_average_rating
    ->with_lowest_selling_price({ quantity => 10 })
    ->with_highest_price
    ->with_quantity_in_stock
    ->with_variant_count

with_average_rating

Adds average_rating column which is available to order_by clauses and whose value can be retrieved via "average_rating" in Interchange6::Schema::Result::Product.

This is the average rating across all public and approved product reviews or undef if there are no reviews. Product reviews are only related to canonical products so for variants the value returned is that of the canonical product.

with_media $type?

Prefetch related active Interchange6::Schema::Result::Media where "type" in Interchange6::Schema::Result::MediaType is $type.

$type defaults to image if not provided.

with_quantity_in_stock

Adds quantity_in_stock column which is available to order_by clauses and whose value can be retrieved via "quantity_in_stock" in Interchange6::Schema::Result::Product.

The value is retrieved is "quantity" in Interchange6::Schema::Result::Inventory.

For a product variant and for a canonical product with no variants the quantity returned is for the product itself.

For a canonical (parent) product the quantity returned is the total for all its variants.

with_lowest_selling_price

Arguments should be given as a hash reference with the following keys/values:

  • quantity => $quantity

    quantity defaults to 1 if not supplied.

The lowest of "price" in Interchange6::Schema::Result::PriceModifier and "price" in Interchange6::Schema::Result::Product.

For products with variants this is the lowest variant selling_price.

Value is placed in the column selling_price.

If "current_user" in Schema is defined then any roles assigned to that user will be included in the search of Interchange6::Schema::Result::PriceModifier.

with_highest_price

For canonical products with no variants and for variant products highest_price is always undef. For canonical products that have variants this is the highest of "price" in Interchange6::Schema::Result::Product of the variants.

with_variant_count

Adds column variant_count which is a count of variants of each product.