Maps set::object using a link table
use Tangram; # or use Tangram::Core; use Tangram::Type::Set::FromMany; $schema = Tangram::Schema->new( classes => { Company => { fields => { set => { # long form employee => { class => 'Person', table => 'Company_employees', coll => 'company', item => 'employee', }, # short form assets => 'Asset', }
Maps a reference to a Set::Object. The persistent fields are grouped in a hash under the \*(C`set\*(C' key in the field hash.
The set 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 two columns: one contains the id of the container objects; the other contains the ids of the elements.
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
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`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.