Skip to main content

Basic Value Resolvers

Most of the time, we use either PropertyValue or IdentifierValue to get the value from the source entity.

PropertyValue

PropertyValue is used to get the value of a property. Example:

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Rekalogika\Analytics\Core\Metadata as Analytics;
use Rekalogika\Analytics\Core\ValueResolver\PropertyValue;

#[ORM\Entity()]
#[Analytics\Summary(
sourceClass: Order::class,
)]
class OrderSummary extends Summary
{
#[ORM\Column(type: Types::STRING)]
#[Analytics\Dimension(
source: new PropertyValue('status'),
)]
private ?string $status = null;
}

IdentifierValue

IdentifierValue is used to get the identifier of an entity. It must be used if the value is not a simple property, but a related entity.

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Rekalogika\Analytics\Core\Metadata as Analytics;
use Rekalogika\Analytics\Core\ValueResolver\IdentifierValue;

#[ORM\Entity()]
#[Analytics\Summary(
sourceClass: Order::class,
)]
class OrderSummary extends Summary
{
#[ORM\ManyToOne()]
#[Analytics\Dimension(
source: new IdentifierValue('country'),
)]
private ?Country $country = null;
}

IntegerValue

IntegerValue is like PropertyValue, but implements PartitionValueResolver and returns an integer value. Usually, it is used in partitions where the source property key is an integer.

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Rekalogika\Analytics\Core\Metadata as Analytics;
use Rekalogika\Analytics\Core\Partition\DefaultIntegerPartition;

#[ORM\Entity()]
#[Analytics\Summary(
sourceClass: Order::class,
)]
class OrderSummary extends Summary
{
#[ORM\Embedded()]
#[Analytics\Partition(new IntegerValue('id'))]
private DefaultIntegerPartition $partition;
}