Class CakeTestModel

A model to extend from to help you during testing.

Object
Extended by Model implements CakeEventListener
Extended by CakeTestModel
Package: Cake\TestSuite\Fixture
Copyright: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
License: MIT License
Located at Cake/TestSuite/Fixture/CakeTestModel.php

Method Detail

__constructsource public

__construct( integer|string|array $id false , string $table null , string $ds null )

Sets default order for the model to avoid failing tests caused by incorrect order when no order has been defined in the finds. Postgres can return the results in any order it considers appropriate if none is specified

Parameters

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

Model::__construct()

savesource public

save( array $data null , boolean|array $validate true , array $fieldList array() )

Overriding save() to set CakeTestSuiteDispatcher::date() as formatter for created, modified and updated fields

Parameters

array $data optional null
Data to save
boolean|array $validate optional true
Validate or options.
array $fieldList optional array()
Whitelist of fields

Returns

mixed
mixed

Throws

Exception
Exception
PDOException
PDOException

Overrides

Model::save()

Methods inherited from Model

__callsource public

__call( string $method , array $params )

Handles custom method calls, like findBy<field> for DB models, and custom RPC calls for remote data sources.

Parameters

string $method
Name of method to call.
array $params
Parameters for the method.

Returns

mixed
Whatever is returned by called method

__getsource 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

mixed
value of requested variable if it is set

__issetsource 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

boolean
true if the variable exists (if is a not loaded model association it will be created), false otherwise

_addToWhiteListsource 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

array
options

_clearCachesource 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

mixed
True on delete, null otherwise

_collectForeignKeyssource protected

_collectForeignKeys( string $type 'belongsTo' )

Collects foreign keys from associations.

Parameters

string $type optional 'belongsTo'
Association type.

Returns

array
array

_constructLinkedModelsource 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();
_createLinks( )

Create a set of associations.

_deleteDependentsource 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( string $id )

Cascades model deletes through HABTM join keys.

Parameters

string $id
ID of record that was deleted

_doSavesource 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

mixed
On success Model::$data if its not empty or true, false on failure

Throws

PDOException
PDOException

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html

_filterResultssource 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

array
Set of filtered results

Triggers

Model.afterFind $this, array($results, $primary)

_findAllsource 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

array
array

See

Model::find()

_findCountsource 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

integer
The number of records found, or false

See

Model::find()

_findFirstsource 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

array
array

See

Model::find()

_findListsource 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

array
Key/value pairs of primary keys/display field values of all records found

See

Model::find()

_findNeighborssource 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

array
array

_findThreadedsource 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

array
Threaded results

_generateAssociationsource protected

_generateAssociation( string $type , string $assocKey )

Build an array-based association from string.

Parameters

string $type
'belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany'
string $assocKey
Association key.

_isUUIDFieldsource protected

_isUUIDField( string $field )

Check if the passed in field is a UUID field

Parameters

string $field
the field to check

Returns

boolean
bool

_normalizeXmlDatasource protected

_normalizeXmlData( array $xml )

Normalize Xml::toArray() to use in Model::save()

Parameters

array $xml
XML as array

Returns

array
array

_prepareUpdateFieldssource 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

array
Returns updated foreign key values, along with an 'old' key containing the old values, or empty if no foreign keys are updated.

_readDataSourcesource 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));
                $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

array
array

_saveMultisource 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.

_setAliasDatasource protected

_setAliasData( array $data )

Move values to alias

Parameters

array $data
Data.

Returns

array
array

afterDeletesource public

afterDelete( )

Called after every deletion operation.

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#afterdelete

afterFindsource 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

mixed
Result of the find operation

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#afterfind

afterSavesource 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().

See

Model::save()

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#aftersave

afterValidatesource public

afterValidate( )

Called after data has been checked for errors

associationssource public

associations( )

Get associations

Returns

array
array

beforeDeletesource 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

boolean
True if the operation should continue, false if it should abort

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#beforedelete

beforeFindsource 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

mixed
true if the operation should continue, false if it should abort; or, modified $query to continue with new $query

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#beforefind

beforeSavesource 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

boolean
True if the operation should continue, false if it should abort

See

Model::save()

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#beforesave

beforeValidatesource 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

boolean
True if validate operation should continue, false to abort

See

Model::save()

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate

bindModelsource 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

boolean
Success

Link

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#creating-and-destroying-associations-on-the-fly

buildQuerysource 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

array|null
Query array or null if it could not be build for some reasons

See

Model::find()

Triggers

Model.beforeFind $this, array($query)

clearsource 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

boolean
Always true upon success

See

Model::create()

createsource 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

array
The current Model::data; after merging $data and/or defaults from database

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-create-array-data-array

deconstructsource 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

mixed
The resulting data that should be assigned to a field

deletesource 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

boolean
True on success

Link

http://book.cakephp.org/2.0/en/models/deleting-data.html

Triggers

Model.beforeDelete $this, array($cascade)
Model.afterDelete $this

deleteAllsource 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

boolean
True on success, false on failure

Link

http://book.cakephp.org/2.0/en/models/deleting-data.html#deleteall

escapeFieldsource 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

string
The name of the escaped field for this Model (i.e. id becomes Post.id).

existssource 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

boolean
True if such a record exists

fieldsource 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

string|false
Field content, or false if not found.

Link

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-field

findsource 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' => 2,
  '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|null
Array of records, or Null on failure.

Link

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html

getAffectedRowssource public

getAffectedRows( )

Returns the number of rows affected by the last query.

Returns

integer
Number of rows

getAssociatedsource 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

array|null
Associations

getColumnTypesource public

getColumnType( string $column )

Returns the column type of a column in the model.

Parameters

string $column
The name of the model column

Returns

string
Column type

getColumnTypessource public

getColumnTypes( )

Returns an associative array of field names and column types.

Returns

array
Field types indexed by field name

getDataSourcesource public

getDataSource( )

Gets the DataSource to which this model is bound.

Returns

DataSource
A DataSource object

getEventManagersource 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

CakeEventManager
CakeEventManager

getIDsource 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

mixed
The ID of the current record, false if no ID

getInsertIDsource public

getInsertID( )

Returns the ID of the last record this model inserted.

Returns

mixed
Last inserted ID

getLastInsertIDsource public

getLastInsertID( )

Returns the ID of the last record this model inserted.

Returns

mixed
Last inserted ID

getNumRowssource public

getNumRows( )

Returns the number of rows returned from the last query.

Returns

integer
Number of rows

getVirtualFieldsource 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

mixed
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.

hasAnysource public

hasAny( array $conditions null )

Returns true if a record that meets given conditions exists.

Parameters

array $conditions optional null
SQL conditions array

Returns

boolean
True if such a record exists

hasFieldsource 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

mixed
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.

hasMethodsource 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

boolean
True on method being callable.

implementedEventssource 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

array
array

Implementation of

CakeEventListener::implementedEvents()

invalidFieldssource 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
Array of invalid fields and their error messages

See

Model::validates()

invalidatesource 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.

isForeignKeysource 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

boolean
True if the field is a foreign key listed in the belongsTo array.

isUniquesource 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

boolean
False if any records matching any fields are found

isVirtualFieldsource 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

boolean
indicating whether the field exists as a model virtual field.

joinModelsource 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

array
array

onErrorsource public

onError( )

Called when a DataSource-level error occurs.

Link

http://book.cakephp.org/2.0/en/models/callback-methods.html#onerror

querysource 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.

Parameters

string $sql
SQL statement

Returns

mixed
Resultset array or boolean indicating success / failure depending on the query executed

Link

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-query

readsource 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
Array of database fields, or false if not found

Link

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#model-read

resetAssociationssource 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

boolean
Success

saveAllsource 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/saveAssociated
  • callbacks: 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

mixed
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

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array
http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveall-array-data-null-array-options-array

saveAssociatedsource public

saveAssociated( array $data null , array $options array() )

Saves a single record, as well as all its directly 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),
  • 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

mixed
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

PDOException
PDOException

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

saveFieldsource 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

boolean|array
See Model::save() False on failure or an array of model data on success.

See

Model::save()

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savefield-string-fieldname-string-fieldvalue-validate-false

saveManysource 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

mixed
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

PDOException
PDOException

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array

schemasource 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|null
Array of table metadata

setsource public

set( string|array|SimpleXmlElement|DomNode $one , string $two null )

This function does two things:

1. 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. 2. 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

array|null
Data with all of $one's keys and values, otherwise null.

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html

setDataSourcesource 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

MissingConnectionException
MissingConnectionException

setInsertIDsource public

setInsertID( integer|string $id )

Sets the ID of the last record this model inserted

Parameters

integer|string $id
Last inserted ID

setSourcesource 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

MissingTableException
when database table $tableName is not found on data source

unbindModelsource 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

boolean
Success

Link

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#creating-and-destroying-associations-on-the-fly

updateAllsource 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

boolean
True on success, false on failure

Link

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-mixed-conditions

updateCounterCachesource 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

validateAssociatedsource 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

array|boolean
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.

validateManysource 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

boolean|array
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.

validatessource 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

boolean
True if there are no errors

validatorsource 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

ModelValidator
ModelValidator

Methods inherited from Object

_mergeVarssource 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.

_setsource 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.

_stopsource 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

dispatchMethodsource 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

mixed
Returns the result of the method call

logsource 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

boolean
Success of log write

requestActionsource 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

mixed
Boolean true or false on success/failure, or contents of rendered action if 'return' is set in $extra.

toStringsource public

toString( )

Object-to-string conversion. Each class can override this method as necessary.

Returns

string
The name of this class

Properties summary

$cacheSourcessource

public boolean

Whether or not to cache sources for this model.

false

$useDbConfigsource

public string

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

http://book.cakephp.org/2.0/en/models/model-attributes.html#usedbconfig
'test'

Properties inherited from Model

$Behaviorssource

public BehaviorCollection

Holds the Behavior objects currently bound to this model.

null

$__backAssociationsource

public array

Holds model associations temporarily to allow for dynamic (un)binding.

array()

$__backContainableAssociationsource

public array

Back containable association

array()

$__backInnerAssociationsource

public array

Back inner association

array()

$__backOriginalAssociationsource

public array

Back original association

array()

$__safeUpdateModesource

public boolean

Safe update mode If true, this prevents Model::save() from generating a query with WHERE 1 = 1 on race condition.

false

$_associationKeyssource

protected array

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')
)

$_associationssource

protected array

Holds provided/generated association key names and other data for all associations.

array('belongsTo', 'hasOne', 'hasMany', 'hasAndBelongsToMany')

$_eventManagersource

protected CakeEventManager

Instance of the CakeEventManager this model is using to dispatch inner events.

null

$_insertIDsource

protected integer

The ID of the model record that was last inserted.

null

$_schemasource

protected array

Field-by-field table metadata.

null

$_sourceConfiguredsource

protected boolean

Has the datasource been configured.

See

Model::getDataSource()
false

$_validatorsource

protected ModelValidator

Instance of the ModelValidator

null

$actsAssource

public array

List of behaviors to load when the model object is initialized. Settings can be passed to behaviors by using the behavior name as index. Eg:

public $actsAs = array('Translate', 'MyBehavior' => array('setting1' => 'value1'))

Link

http://book.cakephp.org/2.0/en/models/behaviors.html#using-behaviors
null

$aliassource

public string

Alias name for model.

null

$belongsTosource

public array

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

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto
array()

$cacheQueriessource

public boolean

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

http://book.cakephp.org/2.0/en/models/model-attributes.html#cachequeries
false

$datasource

public array

Container for the data that this model gets from persistent storage (usually, a database).

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#data
array()

$displayFieldsource

public string

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

http://book.cakephp.org/2.0/en/models/model-attributes.html#displayfield
null

$findMethodssource

public array

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
)

$findQueryTypesource

public string

Type of find query currently executing.

null

$hasAndBelongsToManysource

public array

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

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm
array()

$hasManysource

public array

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

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany
array()

$hasOnesource

public array

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

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasone
array()

$idsource

public mixed

Value of the primary key ID of the record that this model is currently pointing to. Automatically set after database insertions.

false

$namesource

public string

Name of the model.

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#name
null

$ordersource

public string

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

http://book.cakephp.org/2.0/en/models/model-attributes.html#order
null

$pluginsource

public string

Plugin model belongs to.

null

$primaryKeysource

public string

The name of the primary key field for this model.

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#primarykey
null

$recursivesource

public integer

Number of associations to recurse through during find calls. Fetches only the first level by default.

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive
1

$schemaNamesource

public string

Holds physical schema/database name for this model. Automatically set during Model creation.

null

$tablesource

public string

Table name for this Model.

false

$tablePrefixsource

public string

Database table prefix for tables in model.

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#tableprefix
null

$tableToModelsource

public array

List of table names included in the model description. Used for associations.

array()

$useConsistentAfterFindsource

public boolean

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

$useTablesource

public string

Custom database table name, or null/false if no table association is desired.

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#usetable
null

$validatesource

public array

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 parameters
  • message: String with the message or array if have multiple parameters. See http://php.net/sprintf
  • last: 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 save
  • allowEmpty: Boolean value to indicate if the field can be empty
  • on: Possible values: update, create. Indicate to apply this rule only on update or create

Link

http://book.cakephp.org/2.0/en/models/model-attributes.html#validate
http://book.cakephp.org/2.0/en/models/data-validation.html
array()

$validationDomainsource

public string

Name of the validation string domain to use when translating validation errors.

null

$validationErrorssource

public array

List of validation errors.

array()

$virtualFieldssource

public array

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

http://book.cakephp.org/2.0/en/models/model-attributes.html#virtualfields
array()

$whitelistsource

public array

Whitelist of fields allowed to be saved.

array()

© 2005–2016 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
http://api.cakephp.org/2.7/class-CakeTestModel.html