Permalink
Fetching contributors…
Cannot retrieve contributors at this time
162 lines (113 sloc) 4.37 KB

Models

Getting data from objects

Once you've got a set of records (objects) back from a query, you can access properties on those objects (the values stored in the columns in its corresponding table) in two ways: by using the get method, or simply by accessing the property on the object directly:

<?php
$person = ORM::for_table('person')->find_one(5);

// The following two forms are equivalent
$name = $person->get('name');
$name = $person->name;

You can also get the all the data wrapped by an ORM 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.

<?php
$person = ORM::for_table('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');

Updating records

To update the database, change one or more of the properties of the object, then call the save method to commit the changes to the database. Again, you can change the values of the object's properties either by using the set method or by setting the value of the property directly. By using the set method it is also possible to update multiple properties at once, by passing in an associative array:

<?php
$person = ORM::for_table('person')->find_one(5);

// The following two forms are equivalent
$person->set('name', 'Bob Smith');
$person->age = 20;

// This is equivalent to the above two assignments
$person->set(array(
    'name' => 'Bob Smith',
    'age'  => 20
));

// Syncronise the object with the database
$person->save();

Properties containing expressions

It is possible to set properties on the model that contain database expressions using the set_expr method.

<?php
$person = ORM::for_table('person')->find_one(5);
$person->set('name', 'Bob Smith');
$person->age = 20;
$person->set_expr('updated', 'NOW()');
$person->save();

The updated column's value will be inserted into query in its raw form therefore allowing the database to execute any functions referenced - such as NOW() in this case.

Creating new records

To add a new record, you need to first create an "empty" object instance. You then set values on the object as normal, and save it.

<?php
$person = ORM::for_table('person')->create();

$person->name = 'Joe Bloggs';
$person->age = 40;

$person->save();

After the object has been saved, you can call its id() method to find the autogenerated primary key value that the database assigned to it.

Properties containing expressions

It is possible to set properties on the model that contain database expressions using the set_expr method.

<?php
$person = ORM::for_table('person')->create();
$person->set('name', 'Bob Smith');
$person->age = 20;
$person->set_expr('added', 'NOW()');
$person->save();

The added column's value will be inserted into query in its raw form therefore allowing the database to execute any functions referenced - such as NOW() in this case.

Checking whether a property has been modified

To check whether a property has been changed since the object was created (or last saved), call the is_dirty method:

<?php
$name_has_changed = $person->is_dirty('name'); // Returns true or false

Deleting records

To delete an object from the database, simply call its delete method.

<?php
$person = ORM::for_table('person')->find_one(5);
$person->delete();

To delete more than one object from the database, build a query:

<?php
$person = ORM::for_table('person')
    ->where_equal('zipcode', 55555)
    ->delete_many();