Class Model
Object-relational mapper.
DBO-backed object data model. Automatically selects a database table name based on a pluralized lowercase object class name (i.e. class 'User' => table 'users'; class 'Man' => table 'men') The table is required to have at least 'id auto_increment' primary key.
- CakeObject
- Model implements CakeEventListener
Direct Subclasses
Link: http://book.cakephp.org/2.0/en/models.html
Copyright: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
License: MIT License
Location: Cake/Model/Model.php
Properties summary
-
$Behaviors
publicHolds the Behavior objects currently bound to this model. -
$__backAssociation
publicarray
Holds model associations temporarily to allow for dynamic (un)binding. -
array
Back containable association -
$__backInnerAssociation
publicarray
Back inner association -
$__backOriginalAssociation
publicarray
Back original association -
$__safeUpdateMode
publicboolean
Safe update mode If true, this prevents Model::save() from generating a query with WHERE 1 = 1 on race condition.
-
$_associationKeys
protectedarray
Default list of association keys. -
$_associations
protectedarray
Holds provided/generated association key names and other data for all associations. -
$_eventManager
protectedInstance of the CakeEventManager this model is using to dispatch inner events.
-
$_insertID
protectedinteger
The ID of the model record that was last inserted. -
$_schema
protectedarray
Field-by-field table metadata. -
$_sourceConfigured
protectedboolean
Has the datasource been configured. -
$_validator
protectedInstance of the ModelValidator -
$actsAs
publicarray
List of behaviors to load when the model object is initialized. Settings can be passed to behaviors by using the behavior name as index.
-
$alias
publicstring
Alias name for model. -
$belongsTo
publicarray
Detailed list of belongsTo associations. -
$cacheQueries
publicboolean
Whether or not to cache queries for this model. This enables in-memory caching only, the results are not stored beyond the current request.
-
$cacheSources
publicboolean
Whether or not to cache sources for this model. -
$data
publicarray
Container for the data that this model gets from persistent storage (usually, a database). -
$displayField
publicstring
Custom display field name. Display fields are used by Scaffold, in SELECT boxes' OPTION elements. -
$findMethods
publicarray
List of valid finder method options, supplied as the first parameter to find(). -
$findQueryType
publicstring
Type of find query currently executing. -
$hasAndBelongsToMany
publicarray
Detailed list of hasAndBelongsToMany associations. -
$hasMany
publicarray
Detailed list of hasMany associations. -
$hasOne
publicarray
Detailed list of hasOne associations. -
$id
publicmixed
Value of the primary key ID of the record that this model is currently pointing to. Automatically set after database insertions.
-
$name
publicstring
Name of the model. -
$order
publicstring
The column name(s) and direction(s) to order find results by default. -
$plugin
publicstring
Plugin model belongs to. -
$primaryKey
publicstring
The name of the primary key field for this model. -
$recursive
publicinteger
Number of associations to recurse through during find calls. Fetches only the first level by default.
-
$schemaName
publicstring
Holds physical schema/database name for this model. Automatically set during Model creation. -
$table
publicstring
Table name for this Model. -
$tablePrefix
publicstring
Database table prefix for tables in model. -
$tableToModel
publicarray
List of table names included in the model description. Used for associations. -
$useConsistentAfterFind
publicboolean
If true, afterFind will be passed consistent formatted $results in case of $primary is false. The format will be such as the following.
-
$useDbConfig
publicstring
The name of the DataSource connection that this Model uses -
$useTable
publicstring
Custom database table name, or null/false if no table association is desired. -
$validate
publicarray
List of validation rules. It must be an array with the field name as key and using as value one of the following possibilities
-
$validationDomain
publicstring
Name of the validation string domain to use when translating validation errors. -
$validationErrors
publicarray
List of validation errors. -
$virtualFields
publicarray
Array of virtual fields this model has. Virtual fields are aliased SQL expressions. Fields added to this property will be read as other fields in a model but will not be saveable.
-
$whitelist
publicarray
Whitelist of fields allowed to be saved.
Method Summary
-
__call() public
Handles custom method calls, like findBy
for DB models, and custom RPC calls for remote data sources. -
__construct() public
Constructor. Binds the model's database table to the object. -
__get() public
Returns the value of the requested variable if it can be set by __isset() -
__isset() public
Handles the lazy loading of model associations by looking in the association arrays for the requested variable -
_addToWhiteList() protected
Helper method for saveAll() and friends, to add foreign key to fieldlist -
_clearCache() protected
Clears cache for this model. -
_collectForeignKeys() protected
Collects foreign keys from associations. -
_constructLinkedModel() protected
Protected helper method to create associated models of a given class. -
_createLinks() protected
Create a set of associations. -
_deleteDependent() protected
Cascades model deletes through associated hasMany and hasOne child records. -
_deleteLinks() protected
Cascades model deletes through HABTM join keys. -
_doSave() protected
Saves model data (based on white-list, if supplied) to the database. By default, validation occurs before save.
-
_filterResults() protected
Passes query results through model and behavior afterFind() methods. -
_findAll() protected
Handles the before/after filter logic for find('all') operations. Only called by Model::find(). -
_findCount() protected
Handles the before/after filter logic for find('count') operations. Only called by Model::find(). -
_findFirst() protected
Handles the before/after filter logic for find('first') operations. Only called by Model::find(). -
_findList() protected
Handles the before/after filter logic for find('list') operations. Only called by Model::find(). -
_findNeighbors() protected
Detects the previous field's value, then uses logic to find the 'wrapping' rows and return them.
-
_findThreaded() protected
In the event of ambiguous results returned (multiple top level results, with different parent_ids) top level results with different parent_ids to the first result will be dropped
-
_generateAssociation() protected
Build an array-based association from string. -
_isUUIDField() protected
Check if the passed in field is a UUID field -
_normalizeXmlData() protected
NormalizeXml::toArray()
to use inModel::save()
-
_prepareUpdateFields() protected
Helper method forModel::updateCounterCache()
. Checks the fields to be updated for -
_readDataSource() protected
Read from the datasource -
_saveMulti() protected
Saves model hasAndBelongsToMany data to the database. -
_setAliasData() protected
Move values to alias -
afterDelete() public
Called after every deletion operation. -
afterFind() public
Called after each find operation. Can be used to modify any results returned by find(). Return value should be the (modified) results.
-
afterSave() public
Called after each successful save operation. -
afterValidate() public
Called after data has been checked for errors -
associations() public
Get associations -
beforeDelete() public
Called before every deletion operation. -
beforeFind() public
Called before each find operation. Return false if you want to halt the find call, otherwise return the (modified) query data.
-
beforeSave() public
Called before each save operation, after validation. Return a non-true result to halt the save.
-
beforeValidate() public
Called during validation operations, before validation. Please note that custom validation rules can be defined in $validate.
-
bindModel() public
Bind model associations on the fly. -
buildQuery() public
Builds the query array that is used by the data source to generate the query to fetch the data. -
clear() public
This function is a convenient wrapper class to create(false) and, as the name suggests, clears the id, data, and validation errors. -
create() public
Initializes the model for writing a new record, loading the default values for those fields that are not defined in $data, and clearing previous validation errors. Especially helpful for saving data in loops.
-
deconstruct() public
Deconstructs a complex data type (array or object) into a single field value. -
delete() public
Removes record for given ID. If no ID is given, the current ID is used. Returns true on success. -
deleteAll() public
Deletes multiple model records based on a set of conditions. -
escapeField() public
Escapes the field name and prepends the model name. Escaping is done according to the current database driver's rules.
-
exists() public
Returns true if a record with particular ID exists. -
field() public
Returns the content of a single field given the supplied conditions, of the first record in the supplied order.
-
find() public
Queries the datasource and returns a result set array. -
getAffectedRows() public
Returns the number of rows affected by the last query. -
getAssociated() public
Gets all the models with which this model is associated. -
getColumnType() public
Returns the column type of a column in the model. -
getColumnTypes() public
Returns an associative array of field names and column types. -
getDataSource() public
Gets the DataSource to which this model is bound. -
getEventManager() public
Returns the CakeEventManager manager instance that is handling any callbacks. You can use this instance to register any new listeners or callbacks to the model events, or create your own events and trigger them at will.
-
getID() public
Returns the current record's ID -
getInsertID() public
Returns the ID of the last record this model inserted. -
getLastInsertID() public
Returns the ID of the last record this model inserted. -
getNumRows() public
Returns the number of rows returned from the last query. -
getVirtualField() public
Returns the expression for a model virtual field -
hasAny() public
Returns true if a record that meets given conditions exists. -
hasField() public
Returns true if the supplied field exists in the model's database table. -
hasMethod() public
Check that a method is callable on a model. This will check both the model's own methods, its inherited methods and methods that could be callable through behaviors.
-
implementedEvents() public
Returns a list of all events that will fire in the model during it's lifecycle. You can override this function to add your own listener callbacks
-
invalidFields() public
Returns an array of fields that have failed the validation of the current model. -
invalidate() public
Marks a field as invalid, optionally setting the name of validation rule (in case of multiple validation for field) that was broken.
-
isForeignKey() public
Returns true if given field name is a foreign key in this model. -
isUnique() public
Returns false if any fields passed match any (by default, all if $or = false) of their matching values. -
isVirtualField() public
Returns true if the supplied field is a model Virtual Field -
joinModel() public
Gets the name and fields to be used by a join model. This allows specifying join fields in the association definition.
-
onError() public
Called when a DataSource-level error occurs. -
query() public
Returns a resultset for a given SQL statement. Custom SQL queries should be performed with this method. -
read() public
Returns a list of fields from the database, and sets the current model data (Model::$data) with the record found.
-
resetAssociations() public
This resets the association arrays for the model back to those originally defined in the model. Normally called at the end of each call to Model::find()
-
save() public
Saves model data (based on white-list, if supplied) to the database. By default, validation occurs before save. Passthrough method to _doSave() with transaction handling.
-
saveAll() public
Backwards compatible passthrough method for: saveMany(), validateMany(), saveAssociated() and validateAssociated()
-
saveAssociated() public
Saves a single record, as well as all its directly associated records. -
saveField() public
Saves the value of a single field to the database, based on the current model ID.
-
saveMany() public
Saves multiple individual records for a single model -
schema() public
Returns an array of table metadata (column names and types) from the database. $field => keys(type, null, default, key, length, extra)
-
set() public
This function does two things: -
setDataSource() public
Sets the DataSource to which this model is bound. -
setInsertID() public
Sets the ID of the last record this model inserted -
setSource() public
Sets a custom table for your model class. Used by your controller to select a database table. -
unbindModel() public
Turn off associations on the fly. -
updateAll() public
Updates multiple model records based on a set of conditions. -
updateCounterCache() public
Updates the counter cache of belongsTo associations after a save or delete operation -
validateAssociated() public
Validates a single record, as well as all its directly associated records. -
validateMany() public
Validates multiple individual records for a single model -
validates() public
Returns true if all fields pass validation. Will validate hasAndBelongsToMany associations that use the 'with' key as well. Since _saveMulti is incapable of exiting a save operation.
-
validator() public
Returns an instance of a model validator for this class
Method Detail
__call() public ¶
__call( string $method , array $params )
Handles custom method calls, like findBy
Parameters
- string $method
- Name of method to call.
- array $params
- Parameters for the method.
Returns
Whatever is returned by called method
__construct() public ¶
__construct( boolean|integer|string|array $id = false , string $table = null , string $ds = null )
Constructor. Binds the model's database table to the object.
If $id
is an array it can be used to pass several options into the model.
id
: The id to start the model on.table
: The table to use for this model.ds
: The connection name this model is connected to.name
: The name of the model eg. Post.alias
: The alias of the model, this is used for registering the instance in theClassRegistry
. eg.ParentThread
Overriding Model's __construct method.
When overriding Model::__construct() be careful to include and pass in all 3 of the
arguments to parent::__construct($id, $table, $ds);
Dynamically creating models
You can dynamically create model instances using the $id array syntax.
$Post = new Model(array('table' => 'posts', 'name' => 'Post', 'ds' => 'connection2'));
Would create a model attached to the posts table on connection2. Dynamic model creation is useful when you want a model object that contains no associations or attached behaviors.
Parameters
- boolean|integer|string|array $id optional false
Set this ID for this model on startup, can also be an array of options, see above.
- string $table optional null
- Name of database table to use.
- string $ds optional null
- DataSource connection name.
Overrides
__get() public ¶
__get( string $name )
Returns the value of the requested variable if it can be set by __isset()
Parameters
- string $name
- variable requested for it's value or reference
Returns
value of requested variable if it is set
__isset() public ¶
__isset( string $name )
Handles the lazy loading of model associations by looking in the association arrays for the requested variable
Parameters
- string $name
- variable tested for existence in class
Returns
true if the variable exists (if is a not loaded model association it will be created), false otherwise
_addToWhiteList() protected ¶
_addToWhiteList( string $key , array $options )
Helper method for saveAll() and friends, to add foreign key to fieldlist
Parameters
- string $key
- fieldname to be added to list
- array $options
- Options list
Returns
options
_clearCache() protected ¶
_clearCache( string $type = null )
Clears cache for this model.
Parameters
- string $type optional null
If null this deletes cached views if Cache.check is true Will be used to allow deleting query cache also
Returns
True on delete, null otherwise
_collectForeignKeys() protected ¶
_collectForeignKeys( string $type = 'belongsTo' )
Collects foreign keys from associations.
Parameters
- string $type optional 'belongsTo'
- Association type.
Returns
_constructLinkedModel() protected ¶
_constructLinkedModel( string $assoc , string $className = null , string $plugin = null )
Protected helper method to create associated models of a given class.
Parameters
- string $assoc
- Association name
- string $className optional null
- Class name
- string $plugin optional null
name of the plugin where $className is located examples: public $hasMany = array('Assoc' => array('className' => 'ModelName')); usage: $this->Assoc->modelMethods();
public $hasMany = array('ModelName'); usage: $this->ModelName->modelMethods();
_deleteDependent() protected ¶
_deleteDependent( string $id , boolean $cascade )
Cascades model deletes through associated hasMany and hasOne child records.
Parameters
- string $id
- ID of record that was deleted
- boolean $cascade
- Set to true to delete records that depend on this record
_deleteLinks() protected ¶
_deleteLinks( string $id )
Cascades model deletes through HABTM join keys.
Parameters
- string $id
- ID of record that was deleted
_doSave() protected ¶
_doSave( array $data = null , array $options = array() )
Saves model data (based on white-list, if supplied) to the database. By default, validation occurs before save.
Parameters
- array $data optional null
- Data to save.
- array $options optional array()
can have following keys:
- validate: Set to true/false to enable or disable validation.
- fieldList: An array of fields you want to allow for saving.
- callbacks: Set to false to disable callbacks. Using 'before' or 'after' will enable only those callbacks.
counterCache
: Boolean to control updating of counter caches (if any)
Returns
On success Model::$data if its not empty or true, false on failure
Throws
Link
_filterResults() protected ¶
_filterResults( array $results , boolean $primary = true )
Passes query results through model and behavior afterFind() methods.
Parameters
- array $results
- Results to filter
- boolean $primary optional true
- If this is the primary model results (results from model where the find operation was performed)
Returns
Set of filtered results
Triggers
_findAll() protected ¶
_findAll( string $state , array $query , array $results = array() )
Handles the before/after filter logic for find('all') operations. Only called by Model::find().
Parameters
- string $state
- Either "before" or "after"
- array $query
- Query.
- array $results optional array()
- Results.
Returns
See
_findCount() protected ¶
_findCount( string $state , array $query , array $results = array() )
Handles the before/after filter logic for find('count') operations. Only called by Model::find().
Parameters
- string $state
- Either "before" or "after"
- array $query
- Query.
- array $results optional array()
- Results.
Returns
The number of records found, or false
See
_findFirst() protected ¶
_findFirst( string $state , array $query , array $results = array() )
Handles the before/after filter logic for find('first') operations. Only called by Model::find().
Parameters
- string $state
- Either "before" or "after"
- array $query
- Query.
- array $results optional array()
- Results.
Returns
See
_findList() protected ¶
_findList( string $state , array $query , array $results = array() )
Handles the before/after filter logic for find('list') operations. Only called by Model::find().
Parameters
- string $state
- Either "before" or "after"
- array $query
- Query.
- array $results optional array()
- Results.
Returns
Key/value pairs of primary keys/display field values of all records found
See
_findNeighbors() protected ¶
_findNeighbors( string $state , array $query , array $results = array() )
Detects the previous field's value, then uses logic to find the 'wrapping' rows and return them.
Parameters
- string $state
- Either "before" or "after"
- array $query
- Query.
- array $results optional array()
- Results.
Returns
_findThreaded() protected ¶
_findThreaded( string $state , array $query , array $results = array() )
In the event of ambiguous results returned (multiple top level results, with different parent_ids) top level results with different parent_ids to the first result will be dropped
Parameters
- string $state
- Either "before" or "after".
- array $query
- Query.
- array $results optional array()
- Results.
Returns
Threaded results
_generateAssociation() protected ¶
_generateAssociation( string $type , string $assocKey )
Build an array-based association from string.
Parameters
- string $type
- 'belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany'
- string $assocKey
- Association key.
_isUUIDField() protected ¶
_isUUIDField( string $field )
Check if the passed in field is a UUID field
Parameters
- string $field
- the field to check
Returns
_normalizeXmlData() protected ¶
_normalizeXmlData( array $xml )
Normalize Xml::toArray()
to use in Model::save()
Parameters
- array $xml
- XML as array
Returns
_prepareUpdateFields() protected ¶
_prepareUpdateFields( array $data )
Helper method for Model::updateCounterCache()
. Checks the fields to be updated for
Parameters
- array $data
- The fields of the record that will be updated
Returns
Returns updated foreign key values, along with an 'old' key containing the old values, or empty if no foreign keys are updated.
_readDataSource() protected ¶
_readDataSource( string $type , array $query )
Read from the datasource
Model::_readDataSource() is used by all find() calls to read from the data source and can be overloaded to allow caching of datasource calls.
protected function _readDataSource($type, $query) { $cacheName = md5(json_encode($query) . json_encode($this->hasOne) . json_encode($this->belongsTo)); $cache = Cache::read($cacheName, 'cache-config-name'); if ($cache !== false) { return $cache; } $results = parent::_readDataSource($type, $query); Cache::write($cacheName, $results, 'cache-config-name'); return $results; }
Parameters
- string $type
- Type of find operation (all / first / count / neighbors / list / threaded)
- array $query
- Option fields (conditions / fields / joins / limit / offset / order / page / group / callbacks)
Returns
_saveMulti() protected ¶
_saveMulti( array $joined , integer|string $id , DataSource
$db )
Saves model hasAndBelongsToMany data to the database.
Parameters
- array $joined
- Data to save
- integer|string $id
- ID of record in this model
-
DataSource
$db - Datasource instance.
_setAliasData() protected ¶
_setAliasData( array $data )
Move values to alias
Parameters
- array $data
- Data.
Returns
afterFind() public ¶
afterFind( mixed $results , boolean $primary = false )
Called after each find operation. Can be used to modify any results returned by find(). Return value should be the (modified) results.
Parameters
- mixed $results
- The results of the find operation
- boolean $primary optional false
- Whether this model is being queried directly (vs. being queried as an association)
Returns
Result of the find operation
Link
afterSave() public ¶
afterSave( boolean $created , array $options = array() )
Called after each successful save operation.
Parameters
- boolean $created
- True if this save created a new record
- array $options optional array()
- Options passed from Model::save().
Link
See
beforeDelete() public ¶
beforeDelete( boolean $cascade = true )
Called before every deletion operation.
Parameters
- boolean $cascade optional true
- If true records that depend on this record will also be deleted
Returns
True if the operation should continue, false if it should abort
Link
beforeFind() public ¶
beforeFind( array $query )
Called before each find operation. Return false if you want to halt the find call, otherwise return the (modified) query data.
Parameters
- array $query
- Data used to execute this query, i.e. conditions, order, etc.
Returns
true if the operation should continue, false if it should abort; or, modified $query to continue with new $query
Link
beforeSave() public ¶
beforeSave( array $options = array() )
Called before each save operation, after validation. Return a non-true result to halt the save.
Parameters
- array $options optional array()
- Options passed from Model::save().
Returns
True if the operation should continue, false if it should abort
Link
See
beforeValidate() public ¶
beforeValidate( array $options = array() )
Called during validation operations, before validation. Please note that custom validation rules can be defined in $validate.
Parameters
- array $options optional array()
- Options passed from Model::save().
Returns
True if validate operation should continue, false to abort
Link
See
bindModel() public ¶
bindModel( array $params , boolean $reset = true )
Bind model associations on the fly.
If $reset
is false, association will not be reset
to the originals defined in the model
Example: Add a new hasOne binding to the Profile model not defined in the model source code:
$this->User->bindModel(array('hasOne' => array('Profile')));
Bindings that are not made permanent will be reset by the next Model::find() call on this model.
Parameters
- array $params
- Set of bindings (indexed by binding type)
- boolean $reset optional true
- Set to false to make the binding permanent
Returns
Success
Link
buildQuery() public ¶
buildQuery( string $type = 'first' , array $query = array() )
Builds the query array that is used by the data source to generate the query to fetch the data.
Parameters
- string $type optional 'first'
- Type of find operation (all / first / count / neighbors / list / threaded)
- array $query optional array()
- Option fields (conditions / fields / joins / limit / offset / order / page / group / callbacks)
Returns
Query array or null if it could not be build for some reasons
Triggers
See
clear() public ¶
clear( )
This function is a convenient wrapper class to create(false) and, as the name suggests, clears the id, data, and validation errors.
Returns
Always true upon success
See
create() public ¶
create( boolean|array $data = array() , boolean $filterKey = false )
Initializes the model for writing a new record, loading the default values for those fields that are not defined in $data, and clearing previous validation errors. Especially helpful for saving data in loops.
Parameters
- boolean|array $data optional array()
Optional data array to assign to the model after it is created. If null or false, schema data defaults are not merged.
- boolean $filterKey optional false
- If true, overwrites any primary key input with an empty value
Returns
The current Model::data; after merging $data and/or defaults from database
Link
deconstruct() public ¶
deconstruct( string $field , array|object $data )
Deconstructs a complex data type (array or object) into a single field value.
Parameters
- string $field
- The name of the field to be deconstructed
- array|object $data
- An array or object to be deconstructed into a field
Returns
The resulting data that should be assigned to a field
delete() public ¶
delete( integer|string $id = null , boolean $cascade = true )
Removes record for given ID. If no ID is given, the current ID is used. Returns true on success.
Parameters
- integer|string $id optional null
- ID of record to delete
- boolean $cascade optional true
- Set to true to delete records that depend on this record
Returns
True on success
Triggers
Model.afterDelete $this
Link
deleteAll() public ¶
deleteAll( mixed $conditions , boolean $cascade = true , boolean $callbacks = false )
Deletes multiple model records based on a set of conditions.
Parameters
- mixed $conditions
- Conditions to match
- boolean $cascade optional true
- Set to true to delete records that depend on this record
- boolean $callbacks optional false
- Run callbacks
Returns
True on success, false on failure
Link
escapeField() public ¶
escapeField( string $field = null , string $alias = null )
Escapes the field name and prepends the model name. Escaping is done according to the current database driver's rules.
Parameters
- string $field optional null
- Field to escape (e.g: id)
- string $alias optional null
- Alias for the model (e.g: Post)
Returns
The name of the escaped field for this Model (i.e. id becomes
Post
.id
).exists() public ¶
exists( integer|string $id = null )
Returns true if a record with particular ID exists.
If $id is not passed it calls Model::getID()
to obtain the current record ID,
and then performs a Model::find('count')
on the currently configured datasource
to ascertain the existence of the record in persistent storage.
Parameters
- integer|string $id optional null
- ID of record to check for existence
Returns
True if such a record exists
field() public ¶
field( string $name , array $conditions = null , string $order = null )
Returns the content of a single field given the supplied conditions, of the first record in the supplied order.
Parameters
- string $name
- The name of the field to get.
- array $conditions optional null
- SQL conditions (defaults to NULL).
- string $order optional null
- SQL ORDER BY fragment.
Returns
Field content, or false if not found.
Link
find() public ¶
find( string $type = 'first' , array $query = array() )
Queries the datasource and returns a result set array.
Used to perform find operations, where the first argument is type of find operation to perform (all / first / count / neighbors / list / threaded), second parameter options for finding (indexed array, including: 'conditions', 'limit', 'recursive', 'page', 'fields', 'offset', 'order', 'callbacks')
Eg:
$model->find('all', array( 'conditions' => array('name' => 'Thomas Anderson'), 'fields' => array('name', 'email'), 'order' => 'field3 DESC', 'recursive' => 1, 'group' => 'type', 'callbacks' => false, ));
In addition to the standard query keys above, you can provide Datasource, and behavior specific keys. For example, when using a SQL based datasource you can use the joins key to specify additional joins that should be part of the query.
$model->find('all', array( 'conditions' => array('name' => 'Thomas Anderson'), 'joins' => array( array( 'alias' => 'Thought', 'table' => 'thoughts', 'type' => 'LEFT', 'conditions' => '`Thought`.`person_id` = `Person`.`id`' ) ) ));
Disabling callbacks
The callbacks
key allows you to disable or specify the callbacks that should be run. To
disable beforeFind & afterFind callbacks set 'callbacks' => false
in your options. You can
also set the callbacks option to 'before' or 'after' to enable only the specified callback.
Adding new find types
Behaviors and find types can also define custom finder keys which are passed into find(). See the documentation for custom find types (http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#creating-custom-find-types) for how to implement custom find types.
Specifying 'fields' for notation 'list':
- If no fields are specified, then 'id' is used for key and 'model->displayField' is used for value.
- If a single field is specified, 'id' is used for key and specified field is used for value.
- If three fields are specified, they are used (in order) for key, value and group.
- Otherwise, first and second fields are used for key and value.
Note: find(list) + database views have issues with MySQL 5.0. Try upgrading to MySQL 5.1 if you have issues with database views.
Note: find(count) has its own return values.
Parameters
- string $type optional 'first'
- Type of find operation (all / first / count / neighbors / list / threaded)
- array $query optional array()
- Option fields (conditions / fields / joins / limit / offset / order / page / group / callbacks)
Returns
Array of records, or Null on failure.
Link
getAffectedRows() public ¶
getAffectedRows( )
Returns the number of rows affected by the last query.
Returns
Number of rows
getAssociated() public ¶
getAssociated( string $type = null )
Gets all the models with which this model is associated.
Parameters
- string $type optional null
- Only result associations of this type
Returns
Associations
getColumnType() public ¶
getColumnType( string $column )
Returns the column type of a column in the model.
Parameters
- string $column
- The name of the model column
Returns
Column type
getColumnTypes() public ¶
getColumnTypes( )
Returns an associative array of field names and column types.
Returns
Field types indexed by field name
getEventManager() public ¶
getEventManager( )
Returns the CakeEventManager manager instance that is handling any callbacks. You can use this instance to register any new listeners or callbacks to the model events, or create your own events and trigger them at will.
Returns
getID() public ¶
getID( integer $list = 0 )
Returns the current record's ID
Parameters
- integer $list optional 0
- Index on which the composed ID is located
Returns
The ID of the current record, false if no ID
getInsertID() public ¶
getInsertID( )
Returns the ID of the last record this model inserted.
Returns
Last inserted ID
getLastInsertID() public ¶
getLastInsertID( )
Returns the ID of the last record this model inserted.
Returns
Last inserted ID
getNumRows() public ¶
getNumRows( )
Returns the number of rows returned from the last query.
Returns
Number of rows
getVirtualField() public ¶
getVirtualField( string $field = null )
Returns the expression for a model virtual field
Parameters
- string $field optional null
- Name of field to look for
Returns
If $field is string expression bound to virtual field $field If $field is null, returns an array of all model virtual fields or false if none $field exist.
hasAny() public ¶
hasAny( array $conditions = null )
Returns true if a record that meets given conditions exists.
Parameters
- array $conditions optional null
- SQL conditions array
Returns
True if such a record exists
hasField() public ¶
hasField( string|array $name , boolean $checkVirtual = false )
Returns true if the supplied field exists in the model's database table.
Parameters
- string|array $name
- Name of field to look for, or an array of names
- boolean $checkVirtual optional false
- checks if the field is declared as virtual
Returns
If $name is a string, returns a boolean indicating whether the field exists. If $name is an array of field names, returns the first field that exists, or false if none exist.
hasMethod() public ¶
hasMethod( string $method )
Check that a method is callable on a model. This will check both the model's own methods, its inherited methods and methods that could be callable through behaviors.
Parameters
- string $method
- The method to be called.
Returns
True on method being callable.
implementedEvents() public ¶
implementedEvents( )
Returns a list of all events that will fire in the model during it's lifecycle. You can override this function to add your own listener callbacks
Returns
Implementation of
invalidFields() public ¶
invalidFields( array|string $options = array() )
Returns an array of fields that have failed the validation of the current model.
Additionally it populates the validationErrors property of the model with the same array.
Parameters
- array|string $options optional array()
- An optional array of custom options to be made available in the beforeValidate callback
Returns
Array of invalid fields and their error messages
See
invalidate() public ¶
invalidate( string $field , mixed $value = true )
Marks a field as invalid, optionally setting the name of validation rule (in case of multiple validation for field) that was broken.
Parameters
- string $field
- The name of the field to invalidate
- mixed $value optional true
Name of validation rule that was not failed, or validation message to be returned. If no validation key is provided, defaults to true.
isForeignKey() public ¶
isForeignKey( string $field )
Returns true if given field name is a foreign key in this model.
Parameters
- string $field
- Returns true if the input string ends in "_id"
Returns
True if the field is a foreign key listed in the belongsTo array.
isUnique() public ¶
isUnique( array $fields , boolean|array $or = true )
Returns false if any fields passed match any (by default, all if $or = false) of their matching values.
Can be used as a validation method. When used as a validation method, the $or
parameter
contains an array of fields to be validated.
Parameters
- array $fields
- Field/value pairs to search (if no values specified, they are pulled from $this->data)
- boolean|array $or optional true
- If false, all fields specified must match in order for a false return value
Returns
False if any records matching any fields are found
isVirtualField() public ¶
isVirtualField( string $field )
Returns true if the supplied field is a model Virtual Field
Parameters
- string $field
- Name of field to look for
Returns
indicating whether the field exists as a model virtual field.
joinModel() public ¶
joinModel( string|array $assoc , array $keys = array() )
Gets the name and fields to be used by a join model. This allows specifying join fields in the association definition.
Parameters
- string|array $assoc
- The model to be joined
- array $keys optional array()
- Any join keys which must be merged with the keys queried
Returns
query() public ¶
query( string $sql )
Returns a resultset for a given SQL statement. Custom SQL queries should be performed with this method.
The method can options 2nd and 3rd parameters.
- 2nd param: Either a boolean to control query caching or an array of parameters for use with prepared statement placeholders.
- 3rd param: If 2nd argument is provided, a boolean flag for enabling/disabled query caching.
If the query cache param as 2nd or 3rd argument is not given then the model's
default $cacheQueries
value is used.
Parameters
- string $sql
- SQL statement
Returns
Resultset array or boolean indicating success / failure depending on the query executed
Link
read() public ¶
read( string|array $fields = null , integer|string $id = null )
Returns a list of fields from the database, and sets the current model data (Model::$data) with the record found.
Parameters
- string|array $fields optional null
- String of single field name, or an array of field names.
- integer|string $id optional null
- The ID of the record to read
Returns
Array of database fields, or false if not found
Link
resetAssociations() public ¶
resetAssociations( )
This resets the association arrays for the model back to those originally defined in the model. Normally called at the end of each call to Model::find()
Returns
Success
save() public ¶
save( array $data = null , boolean|array $validate = true , array $fieldList = array() )
Saves model data (based on white-list, if supplied) to the database. By default, validation occurs before save. Passthrough method to _doSave() with transaction handling.
Parameters
- array $data optional null
- Data to save.
- boolean|array $validate optional true
Either a boolean, or an array. If a boolean, indicates whether or not to validate before saving. If an array, can have following keys:
- atomic: If true (default), will attempt to save the record in a single transaction.
- validate: Set to true/false to enable or disable validation.
- fieldList: An array of fields you want to allow for saving.
- callbacks: Set to false to disable callbacks. Using 'before' or 'after' will enable only those callbacks.
counterCache
: Boolean to control updating of counter caches (if any)
- array $fieldList optional array()
- List of fields to allow to be saved
Returns
On success Model::$data if its not empty or true, false on failure
Throws
PDOException
Triggers
Model.afterSave $this, array($created, $options)
Link
saveAll() public ¶
saveAll( array $data = array() , array $options = array() )
Backwards compatible passthrough method for: saveMany(), validateMany(), saveAssociated() and validateAssociated()
Saves multiple individual records for a single model; Also works with a single record, as well as all its associated records.
Options
validate
: Set to false to disable validation, true to validate each record before saving, 'first' to validate all records before any are saved (default), or 'only' to only validate the records, but not save them.atomic
: If true (default), will attempt to save all records in a single transaction. Should be set to false if database/table does not support transactions.fieldList
: Equivalent to the $fieldList parameter in Model::save(). It should be an associate array with model name as key and array of fields as value. Eg.array( 'SomeModel' => array('field'), 'AssociatedModel' => array('field', 'otherfield') )
deep
: See saveMany/saveAssociatedcallbacks
: See Model::save()counterCache
: See Model::save()
Parameters
- array $data optional array()
Record data to save. This can be either a numerically-indexed array (for saving multiple records of the same type), or an array indexed by association name.
- array $options optional array()
- Options to use when saving record data, See $options above.
Returns
If atomic: True on success, or false on failure. Otherwise: array similar to the $data array passed, but values are set to true/false depending on whether each record saved successfully.
Link
saveAssociated() public ¶
saveAssociated( array $data = null , array $options = array() )
Saves a single record, as well as all its directly associated records.
Options
validate
: Set tofalse
to disable validation,true
to validate each record before saving, 'first' to validate all records before any are saved(default),atomic
: If true (default), will attempt to save all records in a single transaction. Should be set to false if database/table does not support transactions.fieldList
: Equivalent to the $fieldList parameter in Model::save(). It should be an associate array with model name as key and array of fields as value. Eg.array( 'SomeModel' => array('field'), 'AssociatedModel' => array('field', 'otherfield') )
deep
: If set to true, not only directly associated data is saved, but deeper nested associated data as well.callbacks
: See Model::save()counterCache
: See Model::save()
Parameters
- array $data optional null
- Record data to save. This should be an array indexed by association name.
- array $options optional array()
- Options to use when saving record data, See $options above.
Returns
If atomic: True on success, or false on failure. Otherwise: array similar to the $data array passed, but values are set to true/false depending on whether each record saved successfully.
Throws
Link
saveField() public ¶
saveField( string $name , mixed $value , boolean|array $validate = false )
Saves the value of a single field to the database, based on the current model ID.
Parameters
- string $name
- Name of the table field
- mixed $value
- Value of the field
- boolean|array $validate optional false
Either a boolean, or an array. If a boolean, indicates whether or not to validate before saving. If an array, allows control of 'validate', 'callbacks' and 'counterCache' options. See Model::save() for details of each options.
Returns
See Model::save() False on failure or an array of model data on success.
See
Link
saveMany() public ¶
saveMany( array $data = null , array $options = array() )
Saves multiple individual records for a single model
Options
validate
: Set to false to disable validation, true to validate each record before saving, 'first' to validate all records before any are saved (default),atomic
: If true (default), will attempt to save all records in a single transaction. Should be set to false if database/table does not support transactions.fieldList
: Equivalent to the $fieldList parameter in Model::save()deep
: If set to true, all associated data will be saved as well.callbacks
: See Model::save()counterCache
: See Model::save()
Parameters
- array $data optional null
- Record data to save. This should be a numerically-indexed array
- array $options optional array()
- Options to use when saving record data, See $options above.
Returns
If atomic: True on success, or false on failure. Otherwise: array similar to the $data array passed, but values are set to true/false depending on whether each record saved successfully.
Throws
Link
schema() public ¶
schema( boolean|string $field = false )
Returns an array of table metadata (column names and types) from the database. $field => keys(type, null, default, key, length, extra)
Parameters
- boolean|string $field optional false
- Set to true to reload schema, or a string to return a specific field
Returns
Array of table metadata
set() public ¶
set( string|array|SimpleXmlElement|DomNode $one , string $two = null )
This function does two things:
- it scans the array $one for the primary key, and if that's found, it sets the current id to the value of $one[id]. For all other keys than 'id' the keys and values of $one are copied to the 'data' property of this object.
- Returns an array with all of $one's keys and values. (Alternative indata: two strings, which are mangled to a one-item, two-dimensional array using $one for a key and $two as its value.)
Parameters
- string|array|SimpleXmlElement|DomNode $one
- Array or string of data
- string $two optional null
- Value string for the alternative indata method
Returns
Data with all of $one's keys and values, otherwise null.
Link
setDataSource() public ¶
setDataSource( string $dataSource = null )
Sets the DataSource to which this model is bound.
Parameters
- string $dataSource optional null
- The name of the DataSource, as defined in app/Config/database.php
Throws
setInsertID() public ¶
setInsertID( integer|string $id )
Sets the ID of the last record this model inserted
Parameters
- integer|string $id
- Last inserted ID
setSource() public ¶
setSource( string $tableName )
Sets a custom table for your model class. Used by your controller to select a database table.
Parameters
- string $tableName
- Name of the custom table
Throws
unbindModel() public ¶
unbindModel( array $params , boolean $reset = true )
Turn off associations on the fly.
If $reset is false, association will not be reset to the originals defined in the model
Example: Turn off the associated Model Support request, to temporarily lighten the User model:
$this->User->unbindModel(array('hasMany' => array('SupportRequest')));
Or alternatively:
$this->User->unbindModel(array('hasMany' => 'SupportRequest'));
Unbound models that are not made permanent will reset with the next call to Model::find()
Parameters
- array $params
- Set of bindings to unbind (indexed by binding type)
- boolean $reset optional true
- Set to false to make the unbinding permanent
Returns
Success
Link
updateAll() public ¶
updateAll( array $fields , mixed $conditions = true )
Updates multiple model records based on a set of conditions.
Parameters
- array $fields
Set of fields and values, indexed by fields. Fields are treated as SQL snippets, to insert literal values manually escape your data.
- mixed $conditions optional true
- Conditions to match, true for all records
Returns
True on success, false on failure
Link
updateCounterCache() public ¶
updateCounterCache( array $keys = array() , boolean $created = false )
Updates the counter cache of belongsTo associations after a save or delete operation
Parameters
- array $keys optional array()
- Optional foreign key data, defaults to the information $this->data
- boolean $created optional false
True if a new record was created, otherwise only associations with 'counterScope' defined get updated
validateAssociated() public ¶
validateAssociated( array $data , array $options = array() )
Validates a single record, as well as all its directly associated records.
Options
atomic
: If true (default), returns boolean. If false returns array.fieldList
: Equivalent to the $fieldList parameter in Model::save()deep
: If set to true, not only directly associated data , but deeper nested associated data is validated as well.
Warning: This method could potentially change the passed argument $data
,
If you do not want this to happen, make a copy of $data
before passing it
to this method
Parameters
- array $data
- $data Record data to validate. This should be an array indexed by association name.
- array $options optional array()
- Options to use when validating record data (see above), See also $options of validates().
Returns
If atomic: True on success, or false on failure. Otherwise: array similar to the $data array passed, but values are set to true/false depending on whether each record validated successfully.
validateMany() public ¶
validateMany( array $data , array $options = array() )
Validates multiple individual records for a single model
Options
atomic
: If true (default), returns boolean. If false returns array.fieldList
: Equivalent to the $fieldList parameter in Model::save()deep
: If set to true, all associated data will be validated as well.
Warning: This method could potentially change the passed argument $data
,
If you do not want this to happen, make a copy of $data
before passing it
to this method
Parameters
- array $data
- $data Record data to validate. This should be a numerically-indexed array
- array $options optional array()
- Options to use when validating record data (see above), See also $options of validates().
Returns
If atomic: True on success, or false on failure. Otherwise: array similar to the $data array passed, but values are set to true/false depending on whether each record validated successfully.
validates() public ¶
validates( array $options = array() )
Returns true if all fields pass validation. Will validate hasAndBelongsToMany associations that use the 'with' key as well. Since _saveMulti is incapable of exiting a save operation.
Will validate the currently set data. Use Model::set() or Model::create() to set the active data.
Parameters
- array $options optional array()
- An optional array of custom options to be made available in the beforeValidate callback
Returns
True if there are no errors
validator() public ¶
validator( ModelValidator
$instance = null )
Returns an instance of a model validator for this class
Parameters
-
ModelValidator
$instance optional null Model validator instance. If null a new ModelValidator instance will be made using current model object
Returns
Methods inherited from CakeObject
_mergeVars() protected ¶
_mergeVars( array $properties , string $class , boolean $normalize = true )
Merges this objects $property with the property in $class' definition. This classes value for the property will be merged on top of $class'
This provides some of the DRY magic CakePHP provides. If you want to shut it off, redefine this method as an empty function.
Parameters
- array $properties
- The name of the properties to merge.
- string $class
- The class to merge the property with.
- boolean $normalize optional true
- Set to true to run the properties through Hash::normalize() before merging.
_set() protected ¶
_set( array $properties = array() )
Allows setting of multiple properties of the object in a single line of code. Will only set properties that are part of a class declaration.
Parameters
- array $properties optional array()
- An associative array containing properties and corresponding values.
_stop() protected ¶
_stop( integer|string $status = 0 )
Stop execution of the current script. Wraps exit() making testing easier.
Parameters
- integer|string $status optional 0
- see http://php.net/exit for values
dispatchMethod() public ¶
dispatchMethod( string $method , array $params = array() )
Calls a method on this object with the given parameters. Provides an OO wrapper
for call_user_func_array
Parameters
- string $method
- Name of the method to call
- array $params optional array()
- Parameter list to use when calling $method
Returns
Returns the result of the method call
log() public ¶
log( string $msg , integer $type = LOG_ERR , null|string|array $scope = null )
Convenience method to write a message to CakeLog. See CakeLog::write() for more information on writing to logs.
Parameters
- string $msg
- Log message
- integer $type optional LOG_ERR
- Error type constant. Defined in app/Config/core.php.
- null|string|array $scope optional null
The scope(s) a log message is being created in. See CakeLog::config() for more information on logging scopes.
Returns
Success of log write
requestAction() public ¶
requestAction( string|array $url , array $extra = array() )
Calls a controller's method from any location. Can be used to connect controllers together or tie plugins into a main application. requestAction can be used to return rendered views or fetch the return value from controller actions.
Under the hood this method uses Router::reverse() to convert the $url parameter into a string URL. You should use URL formats that are compatible with Router::reverse()
Passing POST and GET data
POST and GET data can be simulated in requestAction. Use $extra['url']
for
GET data. The $extra['data']
parameter allows POST data simulation.
Parameters
- string|array $url
String or array-based URL. Unlike other URL arrays in CakePHP, this URL will not automatically handle passed and named arguments in the $url parameter.
- array $extra optional array()
if array includes the key "return" it sets the AutoRender to true. Can also be used to submit GET/POST data, and named/passed arguments.
Returns
Boolean true or false on success/failure, or contents of rendered action if 'return' is set in $extra.
toString() public ¶
toString( )
CakeObject-to-string conversion. Each class can override this method as necessary.
Returns
The name of this class
Properties detail
$Behaviors ¶
BehaviorCollection
Holds the Behavior objects currently bound to this model.
null
$__backAssociation ¶
Holds model associations temporarily to allow for dynamic (un)binding.
array()
$__safeUpdateMode ¶
Safe update mode If true, this prevents Model::save() from generating a query with WHERE 1 = 1 on race condition.
false
$_associationKeys ¶
Default list of association keys.
array( 'belongsTo' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'counterCache'), 'hasOne' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'dependent'), 'hasMany' => array('className', 'foreignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'dependent', 'exclusive', 'finderQuery', 'counterQuery'), 'hasAndBelongsToMany' => array('className', 'joinTable', 'with', 'foreignKey', 'associationForeignKey', 'conditions', 'fields', 'order', 'limit', 'offset', 'unique', 'finderQuery') )
$_associations ¶
Holds provided/generated association key names and other data for all associations.
array('belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany')
$_eventManager ¶
CakeEventManager
Instance of the CakeEventManager this model is using to dispatch inner events.
null
$_sourceConfigured ¶
Has the datasource been configured.
See
false
$actsAs ¶
List of behaviors to load when the model object is initialized. Settings can be passed to behaviors by using the behavior name as index.
For example:
public $actsAs = array( 'Translate', 'MyBehavior' => array('setting1' => 'value1') );
Link
null
$belongsTo ¶
Detailed list of belongsTo associations.
Basic usage
public $belongsTo = array('Group', 'Department');
Detailed configuration
public $belongsTo = array( 'Group', 'Department' => array( 'className' => 'Department', 'foreignKey' => 'department_id' ) );
Possible keys in association
className
: the class name of the model being associated to the current model. If you're defining a 'Profile belongsTo User' relationship, the className key should equal 'User.'foreignKey
: the name of the foreign key found in the current model. This is especially handy if you need to define multiple belongsTo relationships. The default value for this key is the underscored, singular name of the other model, suffixed with '_id'.conditions
: An SQL fragment used to filter related model records. It's good practice to use model names in SQL fragments: 'User.active = 1' is always better than just 'active = 1.'type
: the type of the join to use in the SQL query, default is LEFT which may not fit your needs in all situations, INNER may be helpful when you want everything from your main and associated models or nothing at all!(effective when used with some conditions of course). (NB: type value is in lower case - i.e. left, inner)fields
: A list of fields to be retrieved when the associated model data is fetched. Returns all fields by default.order
: An SQL fragment that defines the sorting order for the returned associated rows.counterCache
: If set to true the associated Model will automatically increase or decrease the "[singular_model_name]_count" field in the foreign table whenever you do a save() or delete(). If its a string then its the field name to use. The value in the counter field represents the number of related rows.counterScope
: Optional conditions array to use for updating counter cache field.
Link
array()
$cacheQueries ¶
Whether or not to cache queries for this model. This enables in-memory caching only, the results are not stored beyond the current request.
Link
false
$data ¶
Container for the data that this model gets from persistent storage (usually, a database).
Link
array()
$displayField ¶
Custom display field name. Display fields are used by Scaffold, in SELECT boxes' OPTION elements.
This field is also used in find('list')
when called with no extra parameters in the fields list
Link
null
$findMethods ¶
List of valid finder method options, supplied as the first parameter to find().
array( 'all' => true, 'first' => true, 'count' => true, 'neighbors' => true, 'list' => true, 'threaded' => true )
$hasAndBelongsToMany ¶
Detailed list of hasAndBelongsToMany associations.
Basic usage
public $hasAndBelongsToMany = array('Role', 'Address');
Detailed configuration
public $hasAndBelongsToMany = array( 'Role', 'Address' => array( 'className' => 'Address', 'foreignKey' => 'user_id', 'associationForeignKey' => 'address_id', 'joinTable' => 'addresses_users' ) );
Possible keys in association
className
: the class name of the model being associated to the current model. If you're defining a 'Recipe HABTM Tag' relationship, the className key should equal 'Tag.'joinTable
: The name of the join table used in this association (if the current table doesn't adhere to the naming convention for HABTM join tables).with
: Defines the name of the model for the join table. By default CakePHP will auto-create a model for you. Using the example above it would be called RecipesTag. By using this key you can override this default name. The join table model can be used just like any "regular" model to access the join table directly.foreignKey
: the name of the foreign key found in the current model. This is especially handy if you need to define multiple HABTM relationships. The default value for this key is the underscored, singular name of the current model, suffixed with '_id'.associationForeignKey
: the name of the foreign key found in the other model. This is especially handy if you need to define multiple HABTM relationships. The default value for this key is the underscored, singular name of the other model, suffixed with '_id'.unique
: If true (default value) cake will first delete existing relationship records in the foreign keys table before inserting new ones, when updating a record. So existing associations need to be passed again when updating. To prevent deletion of existing relationship records, set this key to a string 'keepExisting'.conditions
: An SQL fragment used to filter related model records. It's good practice to use model names in SQL fragments: "Comment.status = 1" is always better than just "status = 1."fields
: A list of fields to be retrieved when the associated model data is fetched. Returns all fields by default.order
: An SQL fragment that defines the sorting order for the returned associated rows.limit
: The maximum number of associated rows you want returned.offset
: The number of associated rows to skip over (given the current conditions and order) before fetching and associating.finderQuery
, A complete SQL query CakePHP can use to fetch associated model records. This should be used in situations that require very custom results.
Link
array()
$hasMany ¶
Detailed list of hasMany associations.
Basic usage
public $hasMany = array('Comment', 'Task');
Detailed configuration
public $hasMany = array( 'Comment', 'Task' => array( 'className' => 'Task', 'foreignKey' => 'user_id' ) );
Possible keys in association
className
: the class name of the model being associated to the current model. If you're defining a 'User hasMany Comment' relationship, the className key should equal 'Comment.'foreignKey
: the name of the foreign key found in the other model. This is especially handy if you need to define multiple hasMany relationships. The default value for this key is the underscored, singular name of the actual model, suffixed with '_id'.conditions
: An SQL fragment used to filter related model records. It's good practice to use model names in SQL fragments: "Comment.status = 1" is always better than just "status = 1."fields
: A list of fields to be retrieved when the associated model data is fetched. Returns all fields by default.order
: An SQL fragment that defines the sorting order for the returned associated rows.limit
: The maximum number of associated rows you want returned.offset
: The number of associated rows to skip over (given the current conditions and order) before fetching and associating.dependent
: When dependent is set to true, recursive model deletion is possible. In this example, Comment records will be deleted when their associated User record has been deleted.exclusive
: When exclusive is set to true, recursive model deletion does the delete with a deleteAll() call, instead of deleting each entity separately. This greatly improves performance, but may not be ideal for all circumstances.finderQuery
: A complete SQL query CakePHP can use to fetch associated model records. This should be used in situations that require very custom results.
Link
array()
$hasOne ¶
Detailed list of hasOne associations.
Basic usage
public $hasOne = array('Profile', 'Address');
Detailed configuration
public $hasOne = array( 'Profile', 'Address' => array( 'className' => 'Address', 'foreignKey' => 'user_id' ) );
Possible keys in association
className
: the class name of the model being associated to the current model. If you're defining a 'User hasOne Profile' relationship, the className key should equal 'Profile.'foreignKey
: the name of the foreign key found in the other model. This is especially handy if you need to define multiple hasOne relationships. The default value for this key is the underscored, singular name of the current model, suffixed with '_id'. In the example above it would default to 'user_id'.conditions
: An SQL fragment used to filter related model records. It's good practice to use model names in SQL fragments: "Profile.approved = 1" is always better than just "approved = 1."fields
: A list of fields to be retrieved when the associated model data is fetched. Returns all fields by default.order
: An SQL fragment that defines the sorting order for the returned associated rows.dependent
: When the dependent key is set to true, and the model's delete() method is called with the cascade parameter set to true, associated model records are also deleted. In this case we set it true so that deleting a User will also delete her associated Profile.
Link
array()
$id ¶
Value of the primary key ID of the record that this model is currently pointing to. Automatically set after database insertions.
false
$order ¶
The column name(s) and direction(s) to order find results by default.
public $order = "Post.created DESC"; public $order = array("Post.view_count DESC", "Post.rating DESC");
Link
null
$recursive ¶
Number of associations to recurse through during find calls. Fetches only the first level by default.
Link
1
$schemaName ¶
Holds physical schema/database name for this model. Automatically set during Model creation.
null
$tableToModel ¶
List of table names included in the model description. Used for associations.
array()
$useConsistentAfterFind ¶
If true, afterFind will be passed consistent formatted $results in case of $primary is false. The format will be such as the following.
$results = array( 0 => array( 'ModelName' => array( 'field1' => 'value1', 'field2' => 'value2' ) ) );
true
$useDbConfig ¶
The name of the DataSource connection that this Model uses
The value must be an attribute name that you defined in app/Config/database.php
or created using ConnectionManager::create()
.
Link
'default'
$useTable ¶
Custom database table name, or null/false if no table association is desired.
Link
null
$validate ¶
List of validation rules. It must be an array with the field name as key and using as value one of the following possibilities
Validating using regular expressions
public $validate = array( 'name' => '/^[a-z].+$/i' );
Validating using methods (no parameters)
public $validate = array( 'name' => 'notBlank' );
Validating using methods (with parameters)
public $validate = array( 'length' => array( 'rule' => array('lengthBetween', 5, 25) ) );
Validating using custom method
public $validate = array( 'password' => array( 'rule' => array('customValidation') ) ); public function customValidation($data) { // $data will contain array('password' => 'value') if (isset($this->data[$this->alias]['password2'])) { return $this->data[$this->alias]['password2'] === current($data); } return true; }
Validations with messages
The messages will be used in Model::$validationErrors and can be used in the FormHelper
public $validate = array( 'length' => array( 'rule' => array('lengthBetween', 5, 15), 'message' => array('Between %d to %d characters') ) );
Multiple validations to the same field
public $validate = array( 'login' => array( array( 'rule' => 'alphaNumeric', 'message' => 'Only alphabets and numbers allowed', 'last' => true ), array( 'rule' => array('minLength', 8), 'message' => array('Minimum length of %d characters') ) ) );
Valid keys in validations
rule
: String with method name, regular expression (started by slash) or array with method and parametersmessage
: String with the message or array if have multiple parameters. See http://php.net/sprintflast
: Boolean value to indicate if continue validating the others rules if the current fail [Default: true]required
: Boolean value to indicate if the field must be present on saveallowEmpty
: Boolean value to indicate if the field can be emptyon
: Possible values:update
,create
. Indicate to apply this rule only on update or create
Link
http://book.cakephp.org/2.0/en/models/data-validation.html
array()
$validationDomain ¶
Name of the validation string domain to use when translating validation errors.
null
$virtualFields ¶
Array of virtual fields this model has. Virtual fields are aliased SQL expressions. Fields added to this property will be read as other fields in a model but will not be saveable.
public $virtualFields = array('two' => '1 + 1');
Is a simplistic example of how to set virtualFields
Link
array()