Comment on page
Segments
A Segment is a subset of a Collection: it's a saved filter of your Collection.
Segments are designed for those who want to systematically visualize data according to specific sets of filters. It allows you to save filter configurations so user don’t have to do repetitive actions every day.

Segments can be configured from the interface, without the need to write any code.
Sometimes, Segment filters are complicated and closely tied to your business. Forest Admin allows you to code how the Segment is computed.
For instance, in our Live Demo example ↗, we’ve implemented a Segment on the collection
products
to allow admin users to see the bestsellers at a glance.As Forest Admin does not impose any restriction on the handler, you are free to call external APIs or query your database directly instead.
The only requirement when implementing a Segment from your agent is to return a valid
ConditionTree
(see Understanding Filters).use ForestAdmin\AgentPHP\DatasourceCustomizer\CollectionCustomizer;
use ForestAdmin\AgentPHP\DatasourceCustomizer\Context\CollectionCustomizationContext;
use ForestAdmin\AgentPHP\DatasourceToolkit\Components\Query\Aggregation;
use ForestAdmin\AgentPHP\DatasourceToolkit\Components\Query\Filters\Filter;
use ForestAdmin\AgentPHP\DatasourceToolkit\Components\Query\ConditionTree\Operators;
$forestAgent->customizeCollection(
'Customer',
function (CollectionCustomizer $builder) {
$builder->addSegment(
'mostPurchased',
function (CollectionCustomizationContext $context) {
$rows = $context->getDatasource()->getCollection('Order')->aggregate(
new Filter(),
new Aggregation(operation: 'Count', groups: [['field' => 'category_id']]),
10
);
return [
'field' => 'id',
'operator' => Operators::IN,
'value' => array_map(fn ($r) => $r['product_id'], $rows)
];
}
);
}
);
Last modified 3mo ago