Querying allows you to select data from your database and populate instances of your model classes. Queries start with a call to a static factory method on the base Model class that takes a single argument: the name of the model class you wish to use for your query. This factory method is then used as the start of a method chain which gives you full access to Idiorm’s fluent query API. See Idiorm’s documentation for details of this API.
For example:
$users = Model::factory('User')
->where('name', 'Fred')
->where_gte('age', 20)
->find_many();
You can also use the same shortcut provided by Idiorm when looking up a record by its primary key ID:
$user = Model::factory('User')->find_one($id);
The only differences between using Idiorm and using Paris for querying are as follows:
You may also retrieve a count of the number of rows returned by your query. This method behaves exactly like Idiorm’s count method:
$count = Model::factory('User')->where_lt('age', 20)->count();
The model instances returned by your queries now behave exactly as if they were instances of Idiorm’s raw ORM class.
You can access data:
$user = Model::factory('User')->find_one($id);
echo $user->name;
Update data and save the instance:
$user = Model::factory('User')->find_one($id);
$user->name = 'Paris';
$user->save();
To create a new (empty) instance, use the create method:
$user = Model::factory('User')->create();
$user->name = 'Paris';
$user->save();
To check whether a property has been changed since the object was created (or last saved), call the is_dirty method:
$name_has_changed = $person->is_dirty('name'); // Returns true or false
You can also use database expressions when setting values on your model:
$user = Model::factory('User')->find_one($id);
$user->name = 'Paris';
$user->set_expr('last_logged_in', 'NOW()');
$user->save();
Of course, because these objects are instances of your base model classes, you can also call methods that you have defined on them:
class User extends Model {
public function full_name() {
return $this->first_name . ' ' . $this->last_name;
}
}
$user = Model::factory('User')->find_one($id);
echo $user->full_name();
To delete the database row associated with an instance of your model, call its delete method:
$user = Model::factory('User')->find_one($id);
$user->delete();
You can also get the all the data wrapped by a model subclass instance using the as_array method. This will return an associative array mapping column names (keys) to their values.
The as_array method takes column names as optional arguments. If one or more of these arguments is supplied, only matching column names will be returned.
class Person extends Model {
}
$person = Model::factory('Person')->create();
$person->first_name = 'Fred';
$person->surname = 'Bloggs';
$person->age = 50;
// Returns array('first_name' => 'Fred', 'surname' => 'Bloggs', 'age' => 50)
$data = $person->as_array();
// Returns array('first_name' => 'Fred', 'age' => 50)
$data = $person->as_array('first_name', 'age');