Fetching Database Rows with a Model for the CodeIgniter PHP Framework - Review: the current AbstractModel class
(Page 2 of 4 )
In case you still haven’t had the chance to read the preceding article, and the signature of the generic model class developed then doesn’t ring any bells for you, below I included its complete source code, so you can quickly grasp how it functions. Take a moment to analyze the following class closely:
abstract class MY_Model extends Model
{
protected $table = ''; // table associated to the model
protected $fields = array(); // fields of table associated to the model
protected $id = NULL; // value of the primary key of the table associated to the model
protected $data = array(); // model input data
protected $insertID = NULL; // insertion ID
protected $numRows = NULL; // number of rows returned by SELECTS
protected $validation = array(); // model validation rules
protected $errors = array(); // model errors
/**
* Constructor
*
* @access protected
*/
protected function __construct()
{
parent::Model();
// get CI super object as a model property
$this->ci =& get_instance();
}
/**
* Sets associated table data for the model
*
* @author Alejandro Gervasio
* @return void
* @access public
*/
public function setTableData($table = 'default')
{
if ($this->db->table_exists($table))
{
$this->table = $table;
$this->fields = $this->db->field_names($this->table);
}
}
/**
* Sets value of primary key of the associated table for the model
*
* @author Alejandro Gervasio
* @param integer
* @return void
* @access public
*/
public function setID($id)
{
$this->id = is_integer($id) AND $id > 0 ? $id : 1;
}
/**
* Gets value of primary key of the associated table for the model
*
* @author Alejandro Gervasio
* @return integer
* @access public
*/
public function getID()
{
return $this->id;
}
/** Sets input data for the model
*
* @author Alejandro Gervasio
* @param array
* @return void
* @access public
*/
public function setData($data)
{
if ( is_array($data) AND count($data) > 0)
{
foreach ($data as $key => $value)
{
if (array_search($key, $this->fields) === FALSE)
{
unset($data[$key]);
}
}
$this->data = $data;
}
}
/**
* Sets validation rules for model data
*
* @author Alejandro Gervasio
* @param array
* @return void
* @access public
*/
public function setValidation($validation)
{
if ( is_array($validation) AND count($validation) > 0)
{
foreach ($validation as $field => $rule)
{
if (array_search($field, $this->fields) === FALSE)
{
unset($validation[$key]);
}
}
$this->validation = $validation;
}
}
}
True to form, understanding how each of the methods that comprise the generic model class works should be a straightforward process for you, since they’re quite easy to follow. In the case of the constructor, it simply grabs an instance of the CodeIgniter super object and stores it as a class property, which will be utilized later on when working with some of its native classes.
The other methods are mostly simple setters and getters that permit you to assign the proper values to the data that will be used by the model for inserting and updating database rows, as well as for setting the validation rules that will be applied by the model. Not too hard to understand, right?
Well, now that you surely have a clearer idea of how the previous “AbtractModel” class does its business, it’s time to continue adding more functionality to it. Thus, as I expressed in the introduction, in the section to come I’m going to code a whole new core method that will be tasked with fetching rows from the specified database table in accordance with certain conditions.
To learn how this method will be implemented, click on the link below and keep reading.
Next: Implementing the fetch() method >>
More Miscellaneous Code Articles
More By Alejandros Gervasio