silverstripe-framework/docs/en/02_Developer_Guides/00_Model/03_Lists.md
2017-08-07 15:11:17 +12:00

2.3 KiB

title: Managing Lists summary: The SS_List interface allows you to iterate through and manipulate a list of objects.

Managing Lists

Whenever using the ORM to fetch records or navigate relationships you will receive an SS_List instance commonly as either DataList or RelationList. This object gives you the ability to iterate over each of the results or modify.

Iterating over the list.

SS_List implements IteratorAggregate, allowing you to loop over the instance.

    $members = Member::get();

    foreach($members as $member) {
        echo $member->Name;
    }

Or in the template engine:


    <% loop $Members %>
        <!-- -->
    <% end_loop %>

Finding an item by value.

    // $list->find($key, $value);

    //
    $members = Member::get();

    echo $members->find('ID', 4)->FirstName;
    // returns 'Sam'

Maps

A map is an array where the array indexes contain data as well as the values. You can build a map from any list

    $members = Member::get()->map('ID', 'FirstName');
    
    // $members = array(
    //    1 => 'Sam'
    //    2 => 'Sig'
    //    3 => 'Will'
    // );

This functionality is provided by the Map class, which can be used to build a map around any SS_List.

    $members = Member::get();
    $map = new Map($members, 'ID', 'FirstName');

Column

    $members = Member::get();

    echo $members->column('Email');

    // returns array(
    //    'sam@silverstripe.com',
    //    'sig@silverstripe.com',
    //    'will@silverstripe.com'
    // );

ArrayList

ArrayList exists to wrap a standard PHP array in the same API as a database backed list.

    $sam = Member::get()->byId(5);
    $sig = Member::get()->byId(6);

    $list = new ArrayList();
    $list->push($sam);
    $list->push($sig);

    echo $list->Count();
    // returns '2'

API Documentation