implements Phalcon\Mvc\ModelInterface, Phalcon\Mvc\Model\ResultInterface, Phalcon\DI\InjectionAwareInterface, Serializable
Phalcon\Mvc\Model connects business objects and database tables to create a persistable domain model where logic and data are presented in one wrapping. It‘s an implementation of the object-relational mapping (ORM). A model represents the information (data) of the application and the rules to manipulate that data. Models are primarily used for managing the rules of interaction with a corresponding database table. In most cases, each table in your database will correspond to one model in your application. The bulk of your application’s business logic will be concentrated in the models. Phalcon\Mvc\Model is the first ORM written in C-language for PHP, giving to developers high performance when interacting with databases while is also easy to use.
$robot = new Robots(); $robot->type = 'mechanical'; $robot->name = 'Astro Boy'; $robot->year = 1952; if ($robot->save() == false) { echo "Umh, We can store robots: "; foreach ($robot->getMessages() as $message) { echo $message; } } else { echo "Great, a new robot was saved successfully!"; }
Phalcon\Mvc\Model constructor
Sets the dependency injection container
Returns the dependency injection container
Sets a custom events manager
Returns the custom events manager
Returns the models meta-data service related to the entity instance
Returns the models manager related to the entity instance
Sets a transaction related to the Model instance
use Phalcon\Mvc\Model\Transaction\Manager as TxManager; use Phalcon\Mvc\Model\Transaction\Failed as TxFailed; try { $txManager = new TxManager(); $transaction = $txManager->get(); $robot = new Robots(); $robot->setTransaction($transaction); $robot->name = 'WALL·E'; $robot->created_at = date('Y-m-d'); if ($robot->save() == false) { $transaction->rollback("Can't save robot"); } $robotPart = new RobotParts(); $robotPart->setTransaction($transaction); $robotPart->type = 'head'; if ($robotPart->save() == false) { $transaction->rollback("Robot part cannot be saved"); } $transaction->commit(); } catch (TxFailed $e) { echo 'Failed, reason: ', $e->getMessage(); }
Sets table name which model should be mapped
Returns table name mapped in the model
Sets schema name where table mapped is located
Returns schema name where table mapped is located
Sets the DependencyInjection connection service name
Sets the DependencyInjection connection service name used to read data
Sets the DependencyInjection connection service name used to write data
Returns the DependencyInjection connection service name used to read data related the model
Returns the DependencyInjection connection service name used to write data related to the model
Sets the dirty state of the object using one of the DIRTY_STATE_* constants
Returns one of the DIRTY_STATE_* constants telling if the record exists in the database or not
Gets the connection used to read data for the model
Gets the connection used to write data to the model
Assigns values to a model from an array
$robot->assign(array( 'type' => 'mechanical', 'name' => 'Astro Boy', 'year' => 1952 ));
Assigns values to a model from an array returning a new model.
$robot = \Phalcon\Mvc\Model::cloneResultMap(new Robots(), array( 'type' => 'mechanical', 'name' => 'Astro Boy', 'year' => 1952 ));
Returns an hydrated result based on the data and the column map
Assigns values to a model from an array returning a new model
$robot = Phalcon\Mvc\Model::cloneResult(new Robots(), array( 'type' => 'mechanical', 'name' => 'Astro Boy', 'year' => 1952 ));
Allows to query a set of records that match the specified conditions
//How many robots are there? $robots = Robots::find(); echo "There are ", count($robots), "\n"; //How many mechanical robots are there? $robots = Robots::find("type='mechanical'"); echo "There are ", count($robots), "\n"; //Get and print virtual robots ordered by name $robots = Robots::find(array("type='virtual'", "order" => "name")); foreach ($robots as $robot) { echo $robot->name, "\n"; } //Get first 100 virtual robots ordered by name $robots = Robots::find(array("type='virtual'", "order" => "name", "limit" => 100)); foreach ($robots as $robot) { echo $robot->name, "\n"; }
Allows to query the first record that match the specified conditions
//What's the first robot in robots table? $robot = Robots::findFirst(); echo "The robot name is ", $robot->name; //What's the first mechanical robot in robots table? $robot = Robots::findFirst("type='mechanical'"); echo "The first mechanical robot name is ", $robot->name; //Get first virtual robot ordered by name $robot = Robots::findFirst(array("type='virtual'", "order" => "name")); echo "The first virtual robot name is ", $robot->name;
Create a criteria for a specific model
Checks if the current record already exists or not
Generate a PHQL SELECT statement for an aggregate
Allows to count how many records match the specified conditions
//How many robots are there? $number = Robots::count(); echo "There are ", $number, "\n"; //How many mechanical robots are there? $number = Robots::count("type='mechanical'"); echo "There are ", $number, " mechanical robots\n";
Allows to calculate a summatory on a column that match the specified conditions
//How much are all robots? $sum = Robots::sum(array('column' => 'price')); echo "The total price of robots is ", $sum, "\n"; //How much are mechanical robots? $sum = Robots::sum(array("type='mechanical'", 'column' => 'price')); echo "The total price of mechanical robots is ", $sum, "\n";
Allows to get the maximum value of a column that match the specified conditions
//What is the maximum robot id? $id = Robots::maximum(array('column' => 'id')); echo "The maximum robot id is: ", $id, "\n"; //What is the maximum id of mechanical robots? $sum = Robots::maximum(array("type='mechanical'", 'column' => 'id')); echo "The maximum robot id of mechanical robots is ", $id, "\n";
Allows to get the minimum value of a column that match the specified conditions
//What is the minimum robot id? $id = Robots::minimum(array('column' => 'id')); echo "The minimum robot id is: ", $id; //What is the minimum id of mechanical robots? $sum = Robots::minimum(array("type='mechanical'", 'column' => 'id')); echo "The minimum robot id of mechanical robots is ", $id;
Allows to calculate the average value on a column matching the specified conditions
//What's the average price of robots? $average = Robots::average(array('column' => 'price')); echo "The average price is ", $average, "\n"; //What's the average price of mechanical robots? $average = Robots::average(array("type='mechanical'", 'column' => 'price')); echo "The average price of mechanical robots is ", $average, "\n";
Fires an event, implicitly calls behaviors and listeners in the events manager are notified
Fires an event, implicitly calls behaviors and listeners in the events manager are notified This method stops if one of the callbacks/listeners returns boolean false
Cancel the current operation
Appends a customized message on the validation process
use \Phalcon\Mvc\Model\Message as Message; class Robots extends Phalcon\Mvc\Model { public function beforeSave() { if ($this->name == 'Peter') { $message = new Message("Sorry, but a robot cannot be named Peter"); $this->appendMessage($message); } } }
Executes validators on every validation call
use Phalcon\Mvc\Model\Validator\ExclusionIn as ExclusionIn; class Subscriptors extends Phalcon\Mvc\Model { public function validation() { $this->validate(new ExclusionIn(array( 'field' => 'status', 'domain' => array('A', 'I') ))); if ($this->validationHasFailed() == true) { return false; } } }
Check whether validation process has generated any messages
use Phalcon\Mvc\Model\Validator\ExclusionIn as ExclusionIn; class Subscriptors extends Phalcon\Mvc\Model { public function validation() { $this->validate(new ExclusionIn(array( 'field' => 'status', 'domain' => array('A', 'I') ))); if ($this->validationHasFailed() == true) { return false; } } }
Returns all the validation messages
$robot = new Robots(); $robot->type = 'mechanical'; $robot->name = 'Astro Boy'; $robot->year = 1952; if ($robot->save() == false) { echo "Umh, We can't store robots right now "; foreach ($robot->getMessages() as $message) { echo $message; } } else { echo "Great, a new robot was saved successfully!"; }
Reads “belongs to” relations and check the virtual foreign keys when inserting or updating records to verify that inserted/updated values are present in the related entity
Reads both “hasMany” and “hasOne” relations and checks the virtual foreign keys (restrict) when deleting records
Reads both “hasMany” and “hasOne” relations and checks the virtual foreign keys (cascade) when deleting records
Executes internal hooks before save a record
Executes internal events after save a record
Sends a pre-build INSERT SQL statement to the relational database system
Sends a pre-build UPDATE SQL statement to the relational database system
Saves related records that must be stored prior to save the master record
Save the related records assigned in the has-one/has-many relations
Inserts or updates a model instance. Returning true on success or false otherwise.
//Creating a new robot $robot = new Robots(); $robot->type = 'mechanical'; $robot->name = 'Astro Boy'; $robot->year = 1952; $robot->save(); //Updating a robot name $robot = Robots::findFirst("id=100"); $robot->name = "Biomass"; $robot->save();
Inserts a model instance. If the instance already exists in the persistance it will throw an exception Returning true on success or false otherwise.
//Creating a new robot $robot = new Robots(); $robot->type = 'mechanical'; $robot->name = 'Astro Boy'; $robot->year = 1952; $robot->create(); //Passing an array to create $robot = new Robots(); $robot->create(array( 'type' => 'mechanical', 'name' => 'Astroy Boy', 'year' => 1952 ));
Updates a model instance. If the instance doesn’t exist in the persistance it will throw an exception Returning true on success or false otherwise.
//Updating a robot name $robot = Robots::findFirst("id=100"); $robot->name = "Biomass"; $robot->update();
Deletes a model instance. Returning true on success or false otherwise.
$robot = Robots::findFirst("id=100"); $robot->delete(); foreach (Robots::find("type = 'mechanical'") as $robot) { $robot->delete(); }
Returns the type of the latest operation performed by the ORM Returns one of the OP_* class constants
Refreshes the model attributes re-querying the record from the database
Skips the current operation forcing a success state
Reads an attribute value by its name
echo $robot->readAttribute('name');
Writes an attribute value by its name
$robot->writeAttribute('name', 'Rosey');
Sets a list of attributes that must be skipped from the generated INSERT/UPDATE statement
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->skipAttributes(array('price')); } }
Sets a list of attributes that must be skipped from the generated INSERT statement
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->skipAttributesOnCreate(array('created_at')); } }
Sets a list of attributes that must be skipped from the generated UPDATE statement
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->skipAttributesOnUpdate(array('modified_in')); } }
Setup a 1-1 relation between two models
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->hasOne('id', 'RobotsDescription', 'robots_id'); } }
Setup a relation reverse 1-1 between two models
class RobotsParts extends \Phalcon\Mvc\Model { public function initialize() { $this->belongsTo('robots_id', 'Robots', 'id'); } }
Setup a relation 1-n between two models
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->hasMany('id', 'RobotsParts', 'robots_id'); } }
Setup a relation n-n between two models through an intermediate relation
class Robots extends \Phalcon\Mvc\Model { public function initialize() { //Setup a many-to-many relation to Parts through RobotsParts $this->hasManyToMany( 'id', 'RobotsParts', 'robots_id', 'parts_id', 'Parts', 'id' ); } }
Setups a behavior in a model
use Phalcon\Mvc\Model\Behavior\Timestampable; class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->addBehavior(new Timestampable(array( 'onCreate' => array( 'field' => 'created_at', 'format' => 'Y-m-d' ) ))); } }
Sets if the model must keep the original record snapshot in memory
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->keepSnapshots(true); } }
Sets the record’s snapshot data. This method is used internally to set snapshot data when the model was set up to keep snapshot data
Checks if the object has internal snapshot data
Returns the internal snapshot data
Check if a specific attribute has changed This only works if the model is keeping data snapshots
Returns a list of changed values
Sets if a model must use dynamic update instead of the all-field update
class Robots extends \Phalcon\Mvc\Model { public function initialize() { $this->useDynamicUpdate(true); } }
Returns related records based on defined relations
Returns related records defined relations depending on the method name
Handles method calls when a method is not implemented
Handles method calls when a static method is not implemented
Magic method to assign values to the the model
Magic method to get related records using the relation alias as a property
Magic method to check if a property is a valid relation
Serializes the object ignoring connections, services, related objects or static properties
Unserializes the object from a serialized string
Returns a simple representation of the object that can be used with var_dump
var_dump($robot->dump());
Returns the instance as an array representation
print_r($robot->toArray());
Enables/disables options in the ORM Available options: events — Enables/Disables globally the internal events virtualForeignKeys — Enables/Disables virtual foreign keys columnRenaming — Enables/Disables column renaming notNullValidations — Enables/Disables automatic not null validation exceptionOnFailedSave — Enables/Disables throws an exception if the saving process fails phqlLiterals — Enables/Disables literals in PHQL this improves the security of applications
© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/api/Phalcon_Mvc_Model.html