silverstripe-framework/docs/en/reference/dataobjectset.md

2.2 KiB

DataObjectSet

Introduction

This class represents a set of [api:DataObject]s, such as the results of a query. It is the base for all datamodel-related querying. It implements the Iterator interface introduced in PHP5.

Relations (has_many/many_many) are described in [api:ComponentSet], a subclass of DataObjectSet.

Usage

Getting the size

:::php
$mySet->Count();

Getting an single element

:::php
$myFirstDataObject = $mySet->First();
$myLastDataObject = $mySet->Last();

Getting multiple elements

:::php
$mySpecialDataObjects = $mySet->find('Status', 'special');
$startingFromTen = $mySet->getOffset(10);
$tenToTwenty = $mySet->getRange(10, 10);

Getting one property

:::php
$myIDArray = $mySet->column('ID');

Grouping

You can group a set by a specific column. Consider using [api:SQLQuery] with a GROUP BY statement for enhanced performance.

:::php
$groupedSet = $mySet->groupBy('Lastname');

Sorting

Sort a set by a specific column.

:::php
$mySet->sort('Lastname'); //ascending
$mySet->sort('Lastname', 'DESC'); //descending

This works on the object itself, so do NOT do something like this:

:::php
$sortedSet = $mySet->sort('Lastname'); //ascending

Merge with other DataObjectSets

:::php
$myFirstSet->merge($mySecondSet);
// $myFirstSet now contains all combined values

Mapping for Dropdowns

When using [api:DropdownField] and its numerous subclasses to select a value from a set, you can easily map the records to a compatible array:

:::php
$map = $mySet->toDropDownMap('ID', 'Title');
$dropdownField = new DropdownField('myField', 'my label', $map);

Converting to array

:::php
$myArray = $mySet->toArray();

Checking for existence

It is good practice to check for empty sets before doing any iteration.

:::php
$mySet = DataObject::get('Players');
if($mySet->exists()) foreach($mySet as $player)

Paging

DataObjects have native support for dealing with pagination. See setPageLimits, setPageLength, etc.

FIXME Complete pagination documentation

API Documentation

[api:DataObjectSet]