Packages:
default
System
System.Caching
System.Collections
System.Data
System.Data.ActiveRecord
System.Data.ActiveRecord.Relations
System.Data.ActiveRecord.Scaffold
System.Data.ActiveReecord.Scaffold.InputBuilder
System.Data.Commom.Sqlite
System.Data.Common
System.Data.Common.Mssql
System.Data.Common.Mysql
System.Data.Common.Oracle
System.Data.Common.Pgsql
System.Data.Common.Sqlite
System.Data.DataGateway
System.Data.SqlMap
System.Data.SqlMap.Configuration
System.Data.SqlMap.Statements
System.Exceptions
System.I18N
System.IO
System.Security
System.Util
System.Web
System.Web.Services
System.Web.UI
System.Web.UI.ActiveControls
System.Web.UI.WebControls
System.Web.UI.WebControls.assets
System.Xml


Classes:
Keyword

Class TActiveRecord

TComponent
   |
   --TActiveRecord

Base class for active records.

An active record creates an object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.

Active record objects are stateful, this is main difference between the TActiveRecord implementation and the TTableGateway implementation.

The essence of an Active Record is an object model of the domain (e.g. products, items) that incorporates both behavior and data in which the classes match very closely the record structure of an underlying database. Each Active Record is responsible for saving and loading to the database and also for any domain logic that acts on the data.

The Active Record provides methods that do the following:

  1. Construct an instance of the Active Record from a SQL result set row.
  2. Construct a new instance for later insertion into the table.
  3. Finder methods to wrap commonly used SQL queries and return Active Record objects.
  4. Update the database and insert into it the data in the Active Record.
Example:
  1. class UserRecord extends TActiveRecord
  2. {
  3. const TABLE='users'; //optional table name.
  4.  
  5. public $username; //corresponds to the fieldname in the table
  6. public $email;
  7.  
  8. //returns active record finder instance
  9. public static function finder($className=__CLASS__)
  10. {
  11. return parent::finder($className);
  12. }
  13. }
  14.  
  15. //create a connection and give it to the ActiveRecord manager.
  16. $dsn = 'pgsql:host=localhost;dbname=test';
  17. $conn = new TDbConnection($dsn, 'dbuser','dbpass');
  18. TActiveRecordManager::getInstance()->setDbConnection($conn);
  19.  
  20. //load the user record with username (primary key) 'admin'.
  21. $user = UserRecord::finder()->findByPk('admin');
  22. $user->email = 'admin@example.org';
  23. $user->save(); //update the 'admin' record.

Since v3.1.1, TActiveRecord starts to support column mapping. The physical column names (defined in database) can be mapped to logical column names (defined in active classes as public properties.) To use this feature, declare a static class variable COLUMN_MAPPING like the following:

  1. class UserRecord extends TActiveRecord
  2. {
  3. const TABLE='users';
  4. public static $COLUMN_MAPPING=array
  5. (
  6. 'user_id'=>'username',
  7. 'email_address'=>'email',
  8. );
  9. public $username;
  10. public $email;
  11. }
In the above, the 'users' table consists of 'user_id' and 'email_address' columns, while the UserRecord class declares 'username' and 'email' properties. By using column mapping, we can regularize the naming convention of column names in active record.

Since v3.1.2, TActiveRecord enhanced its support to access of foreign objects. By declaring a public static variable RELATIONS like the following, one can access the corresponding foreign objects easily:

  1. class UserRecord extends TActiveRecord
  2. {
  3. const TABLE='users';
  4. public static $RELATIONS=array
  5. (
  6. 'department'=>array(self::BELONGS_TO, 'DepartmentRecord', 'department_id'),
  7. 'contacts'=>array(self::HAS_MANY, 'ContactRecord', 'user_id'),
  8. );
  9. }
In the above, the users table is related with departments table (represented by DepartmentRecord) and contacts table (represented by ContactRecord). Now, given a UserRecord instance $user, one can access its department and contacts simply by: $user->department and $user->contacts. No explicit data fetching is needed. Internally, the foreign objects are fetched in a lazy way, which avoids unnecessary overhead if the foreign objects are not accessed at all.

Since v3.1.2, new events OnInsert, OnUpdate and OnDelete are available. The event OnInsert, OnUpdate and OnDelete methods are executed before inserting, updating, and deleting the current record, respectively. You may override these methods; a TActiveRecordChangeEventParameter parameter is passed to these methods. The property TActiveRecordChangeEventParameter::setIsValid of the parameter can be set to false to prevent the change action to be executed. This can be used, for example, to validate the record before the action is executed. For example, in the following the password property is hashed before a new record is inserted.

  1. class UserRecord extends TActiveRecord
  2. {
  3. function OnInsert($param)
  4. {
  5. //parent method should be called to raise the event
  6. parent::OnInsert($param);
  7. $this->nounce = md5(time());
  8. $this->password = md5($this->password.$this->nounce);
  9. }
  10. }

Since v3.1.3 you can also define a method that returns the table name.

  1. class UserRecord extends TActiveRecord
  2. {
  3. public function table()
  4. {
  5. return 'users';
  6. }
  7.  
  8. }

Since: 3.1
Author: Wei Zhuo <weizho[at]gmail[dot]com>

Constructor Summary
public
__construct Array
Create a new instance of an active record with given $data. The record can be saved to the database specified by the $connection object.

Method Summary
void
copyFrom ( mixed $data)
Copies data from an array or another object.
int
count ( string|TActiveRecordCriteria $criteria, mixed $parameters)
Find the number of records.
TActiveRecord
createRecord ( string $type, array $data)
Create an AR instance specified by the AR class name and initial data.
protected  TActiveRecordRelationContext
createRelationContext ( string $name)
Gets a static copy of the relationship context for given property (a key in $RELATIONS), returns null if invalid relationship. Keeps a null reference to all invalid relations called.
boolean
delete ()
Deletes the current record from the database. Once deleted, this object can not be saved again in the same instance.
int
deleteAll ( string|TActiveRecordCriteria $criteria, mixed $parameters)
Delete multiple records using a criteria.
void
deleteAllByPks ( mixed $keys)
Alias for deleteByPk()
int
deleteByPk ( mixed $keys)
Delete records by primary key. Usage:
boolean
equals ( TActiveRecord $record, boolean $strict)
Compare two records using their primary key values (all column values if table does not defined primary keys). The default uses simple == for comparison of their values. Set $strict=true for identity comparison (===).
protected  boolean
fetchResultsFor ( string $property)
Tries to load the relationship results for the given property. The $property value should correspond to an entry key in the $RELATION array.
TActiveRecord
find ( string|TActiveRecordCriteria $criteria, mixed $parameters)
Find one single record that matches the criteria.
array
findAll ( string|TActiveRecordCriteria $criteria, mixed $parameters)
Same as find() but returns an array of objects.
array
findAllByIndex ( TActiveRecordCriteria $criteria, array $fields, array $values)
Fetches records using the sql clause "(fields) IN (values)", where fields is an array of column names and values is an array of values that the columns must have.
array
findAllByPks ( mixed $keys)
Find multiple records matching a list of primary or composite keys.
array
findAllBySql ( string $sql, array $parameters)
Find records using full SQL, returns corresponding record object.
TActiveRecord.
findByPk ( mixed $keys)
Find one record using only the primary key or composite primary keys. Usage:
TActiveRecord,
findBySql ( string $sql, array $parameters)
Find records using full SQL, returns corresponding record object.
TActiveRecord
finder ( string $className)
Returns the instance of a active record finder for a particular class.
void
mixed
getColumnValue ( string $columnName)
Retrieves the column value according to column name.
TDbConnection
Gets the current Db connection, the connection object is obtained from the TActiveRecordManager if connection is currently null.
TActiveRecordInvalidFinderResult
protected  TSqlCriteria
getRecordCriteria ( string|TSqlCriteria $criteria, mixed $parameters, array $args)
Create a new TSqlCriteria object from a string $criteria. The $args are additional parameters and are used in place of the $parameters if $parameters is not an array and $args is an arrary.
TActiveRecordGateway
TActiveRecordManager
Gets the record manager for this object, the default is to call TActiveRecordManager::getInstance().
array
getRecordRelation ( string $property)
array
TDbTableInfo
protected  TActiveRecordRelation,
getRelationHandler ( string $name, array $args)
Returns the active record relationship handler for $RELATION with key value equal to the $property value.
boolean
hasRecordRelation ( string $property)
void
Raised when a command is prepared and parameter binding is completed.
void
Raised before the record attempt to delete its data from the database.
void
Raised when a command is executed and the result from the database was returned.
void
Raised before the record attempt to insert its data into the database.
void
Raised before the record attempt to update its data in the database.
protected  TActiveRecord
populateObject ( array $data)
Populates a new record with the query result.
protected  array
boolean
save ()
Saves the current record to the database, insert or update is automatically determined.
void
setColumnValue ( string $columnName, mixed $value)
Sets the column value according to column name.
void
void
Define the way an active record finder react if an invalid magic-finder invoked
mixed
__call ( mixed $method, mixed $args)
Dynamic find method using parts of method name as search criteria.
mixed
__get ( string $name)
Magic method for reading properties.
void
__set ( string $name, mixed $value)
Magic method for writing properties.
void
__sleep ()
Prevent __call() method creating __sleep() when serializing.
void
Prevent __call() method creating __wakeup() when unserializing.
Methods Inherited From TComponent
TComponent::addParsedObject(), TComponent::attachEventHandler(), TComponent::canGetProperty(), TComponent::canSetProperty(), TComponent::createdOnTemplate(), TComponent::detachEventHandler(), TComponent::evaluateExpression(), TComponent::evaluateStatements(), TComponent::getEventHandlers(), TComponent::getSubProperty(), TComponent::hasEvent(), TComponent::hasEventHandler(), TComponent::hasProperty(), TComponent::raiseEvent(), TComponent::setSubProperty(), TComponent::__get(), TComponent::__set()

Constant Summary
string BELONGS_TO
string HAS_MANY
string HAS_ONE
string MANY_TO_MANY
int STATE_DELETED
int STATE_LOADED
int STATE_NEW

Constructor Details

__construct

public __construct Array

Create a new instance of an active record with given $data. The record can be saved to the database specified by the $connection object.


Method Details

copyFrom

public void copyFrom (mixed $data )

Copies data from an array or another object.

Input
mixed$data
Output
Exception
throwsTActiveRecordException if data is not array or not object.

count

public int count (string|TActiveRecordCriteria $criteria , mixed $parameters )

Find the number of records.

Input
string|TActiveRecordCriteria$criteriaSQL condition or criteria object.
mixed$parametersparameter values.
Output
int number of records.
Exception

createRecord

public TActiveRecord createRecord (string $type , array $data )

Create an AR instance specified by the AR class name and initial data.

If the initial data is empty, the AR object will not be created and null will be returned. (You should use the "new" operator to create the AR instance in that case.)

Input
string$typethe AR class name
array$datainitial data to be populated into the AR object.
Output
TActiveRecord the initialized AR object. Null if the initial data is empty.
Exception

createRelationContext

protected TActiveRecordRelationContext createRelationContext (string $name )

Gets a static copy of the relationship context for given property (a key in $RELATIONS), returns null if invalid relationship. Keeps a null reference to all invalid relations called.

Input
string$namerelationship/property name corresponding to keys in $RELATION array.
Output
TActiveRecordRelationContext object containing information on the active record relationships for given property, null if invalid relationship
Exception

delete

public boolean delete ()

Deletes the current record from the database. Once deleted, this object can not be saved again in the same instance.

Output
boolean true if the record was deleted successfully, false otherwise.
Exception

deleteAll

public int deleteAll (string|TActiveRecordCriteria $criteria , mixed $parameters )

Delete multiple records using a criteria.

Input
string|TActiveRecordCriteria$criteriaSQL condition or criteria object.
mixed$parametersparameter values.
Output
int number of records deleted.
Exception

deleteAllByPks

public void deleteAllByPks (mixed $keys )

Alias for deleteByPk()

Input
mixed$keys
Output
Exception

deleteByPk

public int deleteByPk (mixed $keys )

Delete records by primary key. Usage:

  1. $finder->deleteByPk($primaryKey); //delete 1 record
  2. $finder->deleteByPk($key1,$key2,...); //delete multiple records
  3. $finder->deleteByPk(array($key1,$key2,...)); //delete multiple records

For composite primary keys (determined from the table definitions):

  1. $finder->deleteByPk(array($key1,$key2)); //delete 1 record
  2.  
  3. //delete multiple records
  4. $finder->deleteByPk(array($key1,$key2), array($key3,$key4),...);
  5.  
  6. //delete multiple records
  7. $finder->deleteByPk(array( array($key1,$key2), array($key3,$key4), .. ));

Input
mixed$keysprimary key values.
Output
int number of records deleted.
Exception

equals

public boolean equals (TActiveRecord $record , boolean $strict )

Compare two records using their primary key values (all column values if table does not defined primary keys). The default uses simple == for comparison of their values. Set $strict=true for identity comparison (===).

Input
TActiveRecord$recordanother record to compare with.
boolean$stricttrue to perform strict identity comparison
Output
boolean true if $record equals, false otherwise.
Exception

fetchResultsFor

protected boolean fetchResultsFor (string $property )

Tries to load the relationship results for the given property. The $property value should correspond to an entry key in the $RELATION array.

This method can be used to lazy load relationships.

  1. class TeamRecord extends TActiveRecord
  2. {
  3. ...
  4.  
  5. private $_players;
  6. public static $RELATION=array
  7. (
  8. 'players' => array(self::HAS_MANY, 'PlayerRecord'),
  9. );
  10.  
  11. public function setPlayers($array)
  12. {
  13. $this->_players=$array;
  14. }
  15.  
  16. public function getPlayers()
  17. {
  18. if($this->_players===null)
  19. $this->fetchResultsFor('players');
  20. return $this->_players;
  21. }
  22. }
  23. Usage example:
  24. $team = TeamRecord::finder()->findByPk(1);
  25. var_dump($team->players); //uses lazy load to fetch 'players' relation

Input
string$propertyrelationship/property name corresponding to keys in $RELATION array.
Output
boolean true if relationship exists, false otherwise.
Exception

find

public TActiveRecord find (string|TActiveRecordCriteria $criteria , mixed $parameters )

Find one single record that matches the criteria.

Usage:

  1. $finder->find('username = :name AND password = :pass',
  2. array(':name'=>$name, ':pass'=>$pass));
  3. $finder->find('username = ? AND password = ?', array($name, $pass));
  4. $finder->find('username = ? AND password = ?', $name, $pass);
  5. //$criteria is of TActiveRecordCriteria
  6. $finder->find($criteria); //the 2nd parameter for find() is ignored.

Input
string|TActiveRecordCriteria$criteriaSQL condition or criteria object.
mixed$parametersparameter values.
Output
TActiveRecord matching record object. Null if no result is found.
Exception

findAll

public array findAll (string|TActiveRecordCriteria $criteria , mixed $parameters )

Same as find() but returns an array of objects.

Input
string|TActiveRecordCriteria$criteriaSQL condition or criteria object.
mixed$parametersparameter values.
Output
array matching record objects. Empty array if no result is found.
Exception

findAllByIndex

public array findAllByIndex (TActiveRecordCriteria $criteria , array $fields , array $values )

Fetches records using the sql clause "(fields) IN (values)", where fields is an array of column names and values is an array of values that the columns must have.

This method is to be used by the relationship handler.

Input
TActiveRecordCriteria$criteriaadditional criteria
array$fieldsfield names to match with "(fields) IN (values)" sql clause.
array$valuesmatching field values.
Output
array matching active records. Empty array is returned if no result is found.
Exception

findAllByPks

public array findAllByPks (mixed $keys )

Find multiple records matching a list of primary or composite keys.

For scalar primary keys:

  1. $finder->findAllByPk($key1, $key2, ...);
  2. $finder->findAllByPk(array($key1, $key2, ...));

For composite keys:

  1. $finder->findAllByPk(array($key1, $key2), array($key3, $key4), ...);
  2. $finder->findAllByPk(array(array($key1, $key2), array($key3, $key4), ...));

Input
mixed$keysprimary keys
Output
array matching ActiveRecords. Empty array is returned if no result is found.
Exception

findAllBySql

public array findAllBySql (string $sql , array $parameters )

Find records using full SQL, returns corresponding record object.

The names of the column retrieved must be defined in your Active Record class.

Input
string$sqlselect SQL
array$parameters
Output
array matching active records. Empty array is returned if no result is found.
Exception

findByPk

public TActiveRecord. findByPk (mixed $keys )

Find one record using only the primary key or composite primary keys. Usage:

  1. $finder->findByPk($primaryKey);
  2. $finder->findByPk($key1, $key2, ...);
  3. $finder->findByPk(array($key1,$key2,...));

Input
mixed$keysprimary keys
Output
TActiveRecord. Null if no result is found.
Exception

findBySql

public TActiveRecord, findBySql (string $sql , array $parameters )

Find records using full SQL, returns corresponding record object.

The names of the column retrieved must be defined in your Active Record class.

Input
string$sqlselect SQL
array$parameters
Output
TActiveRecord, null if no result is returned.
Exception

finder

public TActiveRecord finder (string $className )

Returns the instance of a active record finder for a particular class.

The finder objects are static instances for each ActiveRecord class. This means that event handlers bound to these finder instances are class wide. Create a new instance of the ActiveRecord class if you wish to bound the event handlers to object instance.

Input
string$classNameactive record class name.
Output
TActiveRecord active record finder instance.
Exception

getActiveDbConnection

public void getActiveDbConnection ()

Output
Exception

getColumnValue

public mixed getColumnValue (string $columnName )

Retrieves the column value according to column name.

This method is used internally.

Input
string$columnNamethe column name (as defined in database schema)
Output
mixed the corresponding column value
Exception

getDbConnection

public TDbConnection getDbConnection ()

Gets the current Db connection, the connection object is obtained from the TActiveRecordManager if connection is currently null.

Output
TDbConnection current db connection for this object.
Exception

getInvalidFinderResult

public TActiveRecordInvalidFinderResult getInvalidFinderResult ()

Output
TActiveRecordInvalidFinderResult Defaults to 'Null'.
Exception

getRecordCriteria

protected TSqlCriteria getRecordCriteria (string|TSqlCriteria $criteria , mixed $parameters , array $args )

Create a new TSqlCriteria object from a string $criteria. The $args are additional parameters and are used in place of the $parameters if $parameters is not an array and $args is an arrary.

Input
string|TSqlCriteria$criteriasql criteria
mixed$parametersparameters passed by the user.
array$argsadditional parameters obtained from function_get_args().
Output
TSqlCriteria criteria object.
Exception

getRecordGateway

public TActiveRecordGateway getRecordGateway ()

Output
TActiveRecordGateway record table gateway.
Exception

getRecordManager

public TActiveRecordManager getRecordManager ()

Gets the record manager for this object, the default is to call TActiveRecordManager::getInstance().

Output
TActiveRecordManager default active record manager.
Exception

getRecordRelation

public array getRecordRelation (string $property )

Input
string$propertyrelation property name
Output
array relation definition for the specified property
Exception

getRecordRelations

public array getRecordRelations ()

Output
array all relation definitions declared in the AR class
Exception

getRecordTableInfo

public TDbTableInfo getRecordTableInfo ()

Output
TDbTableInfo the meta information of the table associated with this AR class.
Exception

getRelationHandler

protected TActiveRecordRelation, getRelationHandler (string $name , array $args )

Returns the active record relationship handler for $RELATION with key value equal to the $property value.

Input
string$namerelationship/property name corresponding to keys in $RELATION array.
array$argsmethod call arguments.
Output
TActiveRecordRelation, null if the context or the handler doesn't exist
Exception

hasRecordRelation

public boolean hasRecordRelation (string $property )

Input
string$propertyAR property name
Output
boolean whether a relation is declared for the specified AR property
Exception

onCreateCommand

public void onCreateCommand (TDataGatewayEventParameter $param )

Raised when a command is prepared and parameter binding is completed.

The parameter object is TDataGatewayEventParameter of which the TDataGatewayEventParameter::getCommand property can be inspected to obtain the sql query to be executed.

Note well that the finder objects obtained from ActiveRecord::finder() method are static objects. This means that the event handlers are bound to a static finder object and not to each distinct active record object.

Input
TDataGatewayEventParameter$param
Output
Exception

onDelete

public void onDelete (TActiveRecordChangeEventParameter $param )

Raised before the record attempt to delete its data from the database.

To prevent the delete operation, set the TActiveRecordChangeEventParameter::IsValid parameter to false.

Input
TActiveRecordChangeEventParameter$paramevent parameter to be passed to the event handlers
Output
Exception

onExecuteCommand

public void onExecuteCommand (TDataGatewayResultEventParameter $param )

Raised when a command is executed and the result from the database was returned.

The parameter object is TDataGatewayResultEventParameter of which the TDataGatewayEventParameter::getResult property contains the data return from the database. The data returned can be changed by setting the TDataGatewayEventParameter::setResult property.

Note well that the finder objects obtained from ActiveRecord::finder() method are static objects. This means that the event handlers are bound to a static finder object and not to each distinct active record object.

Input
TDataGatewayResultEventParameter$param
Output
Exception

onInsert

public void onInsert (TActiveRecordChangeEventParameter $param )

Raised before the record attempt to insert its data into the database.

To prevent the insert operation, set the TActiveRecordChangeEventParameter::IsValid parameter to false.

Input
TActiveRecordChangeEventParameter$paramevent parameter to be passed to the event handlers
Output
Exception

onUpdate

public void onUpdate (TActiveRecordChangeEventParameter $param )

Raised before the record attempt to update its data in the database.

To prevent the update operation, set the TActiveRecordChangeEventParameter::IsValid parameter to false.

Input
TActiveRecordChangeEventParameter$paramevent parameter to be passed to the event handlers
Output
Exception

populateObject

protected TActiveRecord populateObject (array $data )

Populates a new record with the query result.

This is a wrapper of createRecord.

Input
array$dataname value pair of record data
Output
TActiveRecord object record, null if data is empty.
Exception

populateObjects

protected array populateObjects (TDbDataReader $reader )

Input
TDbDataReader$readerdata reader
Output
array the AR objects populated by the query result
Exception

save

public boolean save ()

Saves the current record to the database, insert or update is automatically determined.

Output
boolean true if record was saved successfully, false otherwise.
Exception

setColumnValue

public void setColumnValue (string $columnName , mixed $value )

Sets the column value according to column name.

This method is used internally.

Input
string$columnNamethe column name (as defined in database schema)
mixed$valuethe corresponding column value
Output
Exception

setDbConnection

public void setDbConnection (TDbConnection $connection )

Input
TDbConnection$connectiondb connection object for this record.
Output
Exception

setInvalidFinderResult

public void setInvalidFinderResult (TActiveRecordInvalidFinderResult|null $value )

Define the way an active record finder react if an invalid magic-finder invoked

Input
TActiveRecordInvalidFinderResult|null$value
Output
Exception

__call

public mixed __call (mixed $method , mixed $args )

Dynamic find method using parts of method name as search criteria.

Method name starting with "findBy" only returns 1 record. Method name starting with "findAllBy" returns 0 or more records. Method name starting with "deleteBy" deletes records by the trail criteria. The condition is taken as part of the method name after "findBy", "findAllBy" or "deleteBy".

The following are equivalent:

  1. $finder->findByName($name)
  2. $finder->find('Name = ?', $name);
  1. $finder->findByUsernameAndPassword($name,$pass); // OR may be used
  2. $finder->findBy_Username_And_Password($name,$pass); // _OR_ may be used
  3. $finder->find('Username = ? AND Password = ?', $name, $pass);
  1. $finder->findAllByAge($age);
  2. $finder->findAll('Age = ?', $age);
  1. $finder->deleteAll('Name = ?', $name);
  2. $finder->deleteByName($name);

Input
mixed$method
mixed$args
Output
mixed single record if method name starts with "findBy", 0 or more records if method name starts with "findAllBy"
Exception

__get

public mixed __get (string $name )

Magic method for reading properties.

This method is overriden to provide read access to the foreign objects via the key names declared in the RELATIONS array.

Input
string$nameproperty name
Output
mixed property value.
Exception

__set

public void __set (string $name , mixed $value )

Magic method for writing properties.

This method is overriden to provide write access to the foreign objects via the key names declared in the RELATIONS array.

Input
string$nameproperty name
mixed$valueproperty value.
Output
Exception

__sleep

public void __sleep ()

Prevent __call() method creating __sleep() when serializing.

Output
Exception

__wakeup

public void __wakeup ()

Prevent __call() method creating __wakeup() when unserializing.

Output
Exception


Constant Details

BELONGS_TO

Type:

string

Value:

'BELONGS_TO'

HAS_MANY

Type:

string

Value:

'HAS_MANY'

HAS_ONE

Type:

string

Value:

'HAS_ONE'

MANY_TO_MANY

Type:

string

Value:

'MANY_TO_MANY'

STATE_DELETED

Type:

int

Value:

2

STATE_LOADED

Type:

int

Value:

1

STATE_NEW

Type:

int

Value:

0