class DataObjectSchema

Provides dataobject and database schema mapping functionality

Traits

A class that can be instantiated or replaced via DI
Provides extensions to this object to integrate it with standard config API methods.

Constants

DB_ONLY

fieldSpec should exclude virtual fields (such as composite fields), and only include fields with a db column.

UNINHERITED

fieldSpec should only return fields that belong to this table, and not any ancestors

INCLUDE_CLASS

fieldSpec should prefix all field specifications with the class name in RecordClass.Column(spec) format.

Config options

table_namespace_separator string Default separate for table namespaces. Can be set to any string for databases that do not support some characters.

Methods

static Injectable
create(array $args)

An implementation of the factory method, allows you to create an instance of a class

static Injectable
singleton(string $class = null)

Creates a class instance by the "singleton" design pattern.

static Config_ForClass
config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .

mixed
stat(string $name) deprecated

Get inherited config value

mixed
uninherited(string $name)

Gets the uninherited value for the given config option

$this
set_stat(string $name, mixed $value) deprecated

Update the config value for a given property

reset()

Clear cached table names

array
getTableNames()

Get all table names

string
sqlColumnForField(string $class, string $field, string $tablePrefix = null)

Given a DataObject class and a field on that class, determine the appropriate SQL for selecting / filtering on in a SQL string. Note that $class must be a valid class, not an arbitrary table.

string
tableName(string $class)

Get table name for the given class.

string
baseDataClass(string|object $class)

Returns the root class (the first to extend from DataObject) for the passed class.

string
baseDataTable(string|object $class)

Get the base table

array
fieldSpecs(string|DataObject $classOrInstance, int $options)

Get all DB field specifications for a class, including ancestors and composite fields.

string|null
fieldSpec(string|DataObject $classOrInstance, string $fieldName, int $options)

Get specifications for a single class field

string|null
tableClass(string $table)

Find the class for the given table

array
databaseFields(string $class, bool $aggregated = true)

Return the complete map of fields to specification on this object, including fixed_fields.

string|null
databaseField(string $class, string $field, bool $aggregated = true)

Gets a single database field.

array
databaseIndexes(string $class, bool $aggregated = true)

No description

bool
classHasTable(string $class)

Check if the given class has a table

array
compositeFields(string $class, bool $aggregated = true)

Returns a list of all the composite if the given db field on the class is a composite field.

string|null
compositeField(string $class, string $field, bool $aggregated = true)

Get a composite field for a class

string
tableForField(string $candidateClass, string $fieldName)

Returns the table name in the class hierarchy which contains a given field column for a {@link DataObject}. If the field does not exist, this will return null.

string
classForField(string $candidateClass, string $fieldName)

Returns the class name in the class hierarchy which contains a given field column for a {@link DataObject}. If the field does not exist, this will return null.

array|null
manyManyComponent(string $class, string $component)

Return information about a specific many_many component. Returns a numeric array.

array|null
manyManyExtraFieldsForComponent(string $class, string $component)

Return the many-to-many extra fields specification for a specific component.

string|null
hasManyComponent(string $class, string $component, bool $classOnly = true)

Return data for a specific has_many component.

string|null
hasOneComponent(string $class, string $component)

Return data for a specific has_one component.

string|null
belongsToComponent(string $class, string $component, bool $classOnly = true)

Return data for a specific belongs_to component.

string|null
unaryComponent(string $class, string $component)

Check class for any unary component

string
getRemoteJoinField(string $class, string $component, string $type = 'has_many', boolean $polymorphic = false)

Tries to find the database key on another object that is used to store a relationship to this class. If no join field can be found it defaults to 'ParentID'.

Details

in Injectable at line 26
static Injectable create(array $args)

An implementation of the factory method, allows you to create an instance of a class

This method will defer class substitution to the Injector API, which can be customised via the Config API to declare substitution classes.

This can be called in one of two ways - either calling via the class directly, or calling on Object and passing the class name as the first parameter. The following are equivalent: $list = DataList::create('SiteTree'); $list = SiteTree::get();

Parameters

array $args

Return Value

Injectable

in Injectable at line 43
static Injectable singleton(string $class = null)

Creates a class instance by the "singleton" design pattern.

It will always return the same instance for this class, which can be used for performance reasons and as a simple way to access instance methods which don't rely on instance data (e.g. the custom SilverStripe static handling).

Parameters

string $class Optional classname to create, if the called class should not be used

Return Value

Injectable The singleton instance

in Configurable at line 20
static Config_ForClass config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .

....).

Return Value

Config_ForClass

in Configurable at line 32
mixed stat(string $name) deprecated

deprecated 5.0 Use ->config()->get() instead

Get inherited config value

Parameters

string $name

Return Value

mixed

in Configurable at line 44
mixed uninherited(string $name)

Gets the uninherited value for the given config option

Parameters

string $name

Return Value

mixed

in Configurable at line 57
$this set_stat(string $name, mixed $value) deprecated

deprecated 5.0 Use ->config()->set() instead

Update the config value for a given property

Parameters

string $name
mixed $value

Return Value

$this

at line 74
reset()

Clear cached table names

at line 88
array getTableNames()

Get all table names

Return Value

array

at line 107
string sqlColumnForField(string $class, string $field, string $tablePrefix = null)

Given a DataObject class and a field on that class, determine the appropriate SQL for selecting / filtering on in a SQL string. Note that $class must be a valid class, not an arbitrary table.

The result will be a standard ANSI-sql quoted string in "Table"."Column" format.

Parameters

string $class Class name (not a table).
string $field Name of field that belongs to this class (or a parent class)
string $tablePrefix Optional prefix for table (alias)

Return Value

string The SQL identifier string for the corresponding column for this field

at line 126
string tableName(string $class)

Get table name for the given class.

Note that this does not confirm a table actually exists (or should exist), but returns the name that would be used if this table did exist.

Parameters

string $class

Return Value

string Returns the table name, or null if there is no table

at line 145
string baseDataClass(string|object $class)

Returns the root class (the first to extend from DataObject) for the passed class.

Parameters

string|object $class

Return Value

string

Exceptions

InvalidArgumentException

at line 165
string baseDataTable(string|object $class)

Get the base table

Parameters

string|object $class

Return Value

string

at line 196
array fieldSpecs(string|DataObject $classOrInstance, int $options)

Get all DB field specifications for a class, including ancestors and composite fields.

Parameters

string|DataObject $classOrInstance
int $options Bitmask of options - UNINHERITED Limit to only this table - DB_ONLY Exclude virtual fields (such as composite fields), and only include fields with a db column. - INCLUDE_CLASS Prefix the field specification with the class name in RecordClass.Column(spec) format.

Return Value

array List of fields, where the key is the field name and the value is the field specification.

at line 248
string|null fieldSpec(string|DataObject $classOrInstance, string $fieldName, int $options)

Get specifications for a single class field

Parameters

string|DataObject $classOrInstance Name or instance of class
string $fieldName Name of field to retrieve
int $options Bitmask of options - UNINHERITED Limit to only this table - DB_ONLY Exclude virtual fields (such as composite fields), and only include fields with a db column. - INCLUDE_CLASS Prefix the field specification with the class name in RecordClass.Column(spec) format.

Return Value

string|null Field will be a string in FieldClass(args) format, or RecordClass.FieldClass(args) format if using INCLUDE_CLASS. Will be null if no field is found.

at line 261
string|null tableClass(string $table)

Find the class for the given table

Parameters

string $table

Return Value

string|null The FQN of the class, or null if not found

at line 349
array databaseFields(string $class, bool $aggregated = true)

Return the complete map of fields to specification on this object, including fixed_fields.

"ID" will be included on every table.

Parameters

string $class Class name to query from
bool $aggregated Include fields in entire hierarchy, rather than just on this table

Return Value

array Map of fieldname to specification, similiar to {@link DataObject::$db}.

at line 376
string|null databaseField(string $class, string $field, bool $aggregated = true)

Gets a single database field.

Parameters

string $class Class name to query from
string $field Field name
bool $aggregated Include fields in entire hierarchy, rather than just on this table

Return Value

string|null Field specification, or null if not a field

at line 388
array databaseIndexes(string $class, bool $aggregated = true)

Parameters

string $class
bool $aggregated

Return Value

array

at line 409
bool classHasTable(string $class)

Check if the given class has a table

Parameters

string $class

Return Value

bool

at line 433
array compositeFields(string $class, bool $aggregated = true)

Returns a list of all the composite if the given db field on the class is a composite field.

Will check all applicable ancestor classes and aggregate results.

Can be called directly on an object. E.g. Member::composite_fields(), or Member::composite_fields(null, true) to aggregate.

Includes composite has_one (Polymorphic) fields

Parameters

string $class Name of class to check
bool $aggregated Include fields in entire hierarchy, rather than just on this table

Return Value

array List of composite fields and their class spec

at line 461
string|null compositeField(string $class, string $field, bool $aggregated = true)

Get a composite field for a class

Parameters

string $class Class name to query from
string $field Field name
bool $aggregated Include fields in entire hierarchy, rather than just on this table

Return Value

string|null Field specification, or null if not a field

at line 682
string tableForField(string $candidateClass, string $fieldName)

Returns the table name in the class hierarchy which contains a given field column for a {@link DataObject}. If the field does not exist, this will return null.

Parameters

string $candidateClass
string $fieldName

Return Value

string

at line 701
string classForField(string $candidateClass, string $fieldName)

Returns the class name in the class hierarchy which contains a given field column for a {@link DataObject}. If the field does not exist, this will return null.

Parameters

string $candidateClass
string $fieldName

Return Value

string

at line 748
array|null manyManyComponent(string $class, string $component)

Return information about a specific many_many component. Returns a numeric array.

The first item in the array will be the class name of the relation.

Standard many_many return type is:

array( , Name of class for relation. E.g. "Categories" , The class that relation is defined in e.g. "Product" , The target class of the relation e.g. "Category" , The field name pointing to 's table e.g. "ProductID". , The field name pointing to 's table e.g. "CategoryID". The join table between the two classes e.g. "Product_Categories". If the class name is 'ManyManyThroughList' then this is the name of the has_many relation. )

Parameters

string $class Name of class to get component for
string $component The component name

Return Value

array|null

at line 839
array|null manyManyExtraFieldsForComponent(string $class, string $component)

Return the many-to-many extra fields specification for a specific component.

Parameters

string $class
string $component

Return Value

array|null

at line 874
string|null hasManyComponent(string $class, string $component, bool $classOnly = true)

Return data for a specific has_many component.

Parameters

string $class Parent class
string $component
bool $classOnly If this is TRUE, than any has_many relationships in the form "ClassName.Field" will have the field data stripped off. It defaults to TRUE.

Return Value

string|null

at line 898
string|null hasOneComponent(string $class, string $component)

Return data for a specific has_one component.

Parameters

string $class
string $component

Return Value

string|null

at line 921
string|null belongsToComponent(string $class, string $component, bool $classOnly = true)

Return data for a specific belongs_to component.

Parameters

string $class
string $component
bool $classOnly If this is TRUE, than any has_many relationships in the form "ClassName.Field" will have the field data stripped off. It defaults to TRUE.

Return Value

string|null

at line 947
string|null unaryComponent(string $class, string $component)

Check class for any unary component

Alias for hasOneComponent() ?: belongsToComponent()

Parameters

string $class
string $component

Return Value

string|null

at line 1048
string getRemoteJoinField(string $class, string $component, string $type = 'has_many', boolean $polymorphic = false)

Tries to find the database key on another object that is used to store a relationship to this class. If no join field can be found it defaults to 'ParentID'.

If the remote field is polymorphic then $polymorphic is set to true, and the return value is in the form 'Relation' instead of 'RelationID', referencing the composite DBField.

Parameters

string $class
string $component Name of the relation on the current object pointing to the remote object.
string $type the join type - either 'has_many' or 'belongs_to'
boolean $polymorphic Flag set to true if the remote join field is polymorphic.

Return Value

string

Exceptions

Exception