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: :: $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. :: $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: :: $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. :: $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. :: $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. :: $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: :: $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. :: $person = ORM::for_table('person')->find_one(5); $person->delete(); To delete more than one object from the database, build a query: :: $person = ORM::for_table('person') ->where_equal('zipcode', 55555) ->delete_many();