SYNOPSIS

   use Tangram;

   # or
   use Tangram::Core;
   use Tangram::Type::Array::FromMany;

   $schema = Tangram::Schema->new(

      classes => { Company => { fields => {

      array =>
      {
         # long form
         employee =>
         {
            class => 'Person',
            table => 'Company_employees',
            coll => 'company',
            item => 'employee',
            slot => 'slot'
         },

         # short form
         assets => 'Asset',
      }

DESCRIPTION

Maps references to a Perl array. The persistent fields are grouped in a hash under the \*(C`array\*(C' key in the field hash.

The array may contain only objects of persistent classes. These classes must have a common persistent base class.

Tangram uses a link table to save the state of the collection. The table has three columns, which contain

  • the id of the container objects

  • the id of the elements

  • the position of the element in the array

The field names are passed in a hash that associates a field name with a field descriptor. The field descriptor may be either a hash or a string. The hash uses the following fields:

  • class

  • aggreg

  • table

  • coll

  • item

  • slot

  • deep_update

Mandatory field \*(C`class\*(C' specifies the class of the elements.

Optional field \*(C`aggreg\*(C' specifies that the elements of the collection must be removed (erased) from persistent storage along with the containing object. The default is not to aggregate.

Optional field \*(C`table\*(C' sets the name of the link table. This defaults to 'C_F', where C is the class of the containing object and F is the field name.

Optional field \*(C`coll\*(C' sets the name the column containing the ids of the containing objects. This defaults to 'coll'.

Optional field \*(C`item\*(C' sets the name the column containing the ids of the elements. This defaults to 'item'.

Optional field \*(C`slot\*(C' sets the name the column containing the position of the elements. This defaults to 'slot'.

Optional field \*(C`deep_update\*(C' specificies that all elements have to be updated automatically when \*(C`update\*(C' is called on the collection object. Automatic update ensures consisitency between the Perl representation and the \s-1DBMS\s0 state, but degrades update performance so use it with caution. The default is not to do automatic updates.

If the descriptor is a string, it is interpreted as the name of the element's class. This is equivalent to specifying only the \*(C`class\*(C' field in the hash variant.