Miscellaneous Code

  Home arrow Miscellaneous Code arrow Page 4 - Inserting Database Records with a Code...
MISCELLANEOUS CODE

Inserting Database Records with a CodeIgniter PHP Framework Model
By: Alejandros Gervasio
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 3
    2009-09-02

    Table of Contents:
  • Inserting Database Records with a CodeIgniter PHP Framework Model
  • Review: fetching database rows with the generic model
  • Coding a method for inserting database records
  • The complete source code of the generic model class

  •  
     

    SEARCH CODEWALKERS

    TOOLS YOU CAN USE

    advertisement

    Inserting Database Records with a CodeIgniter PHP Framework Model - The complete source code of the generic model class


    (Page 4 of 4 )

    As I stated in the previous segment, in the next few lines I list the complete source code of the “AbstractModel” class, this time including the “save()” method that you learned before. Take a look at it, please:

    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;

    }

    }

     

    /**

    * Returns a result set with specified fields according to given conditions.

    *

    * @author Alejandro Gervasio

    * @return query result on success - Boolean FALSE on failure

    * @access public

    */

    public function fetch($fields = '*', $where = NULL, $order = 'id ASC', $limit = NULL, $offset = 0, $join = NULL)

    {

    if ($fields != '*')

    {

    $this->db->select($fields);

    }

    if ($this->id != NULL)

    {

    $this->db->where('id', $this->id);

    }

    elseif($where != NULL)

    {

    $this->db->where($where);

    }

    if ($order != 'id ASC')

    {

    $this->db->orderby($order);

    }

    if ($limit != NULL)

    {

    $this->db->limit($limit, $offset);

    }

    if( $join != NULL)

    {

    $this->db->join($join);

    }

    $query = $this->db->get($this->table);

    $this->numRows = $query->num_rows();

    if ($this->numRows > 0)

    {

    return ($this->numRows > 1 ) ? $query->result() : $query->row();

    }

    $this->errors[] ='No rows were returned by the query.';

    return FALSE;

    }

     

    /** Saves model data into associated table (validation rules are applied to input data)

    *

    *

    * @author Alejandro Gervasio

    * @return integer on success - Boolean FALSE on failure

    * @access public

    */

     

    public function save()

    {

    if ($this->data == NULL)

    {

    $this->errors[] = 'Error saving row.';

    return FALSE;

    }

    // validate input data

    if( !$this->validate())

    {

    return FALSE;

    }

    // Insert new row if ID was not set in the model

    if ($this->id == NULL)

    {

    $this->db->insert($this->table, $this->data);

    $this->insertID = $this->db->insert_id();

    return $this->insertID;

    }

    // Otherwise update existing row

    else

    {

    $this->db->where('id', $this->id)->update($this->table, $this->data);

    return $this->db->affectedRows;

     }

    }

    }

    Definitely, the above generic model class is starting to look a bit more interesting. It's now capable of fetching rows from the specified database table, in addition to inserting new records and updating existing ones via the “save()” method. This means that almost all of the basic CRUD operations can be performed by the class in a straightforward manner, except for deletions.

    Yes, it’s necessary to implement another method that allows you to delete rows from the model’s associated table, but guess what? This topic will be covered in the next tutorial, so in the meantime have fun tweaking the code in its current state.

    Final thoughts

    Over this fourth chapter of the series, I proceeded to code a new method for the generic model class, which allows you to insert a new records into the specified database table, as well as update an existing one. True to form, the way that this method has been implemented is pretty easy to follow, so in theory you shouldn’t have major trouble grasping its underlying logic.

    In the upcoming installment, I’m going to define another method within the “AbstractModel” class that will be responsible for deleting a specified record from its associated database table. Therefore, now that you know what to expect from the next part, you can’t miss it! 


    DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware.
    blog comments powered by Disqus

    MISCELLANEOUS CODE ARTICLES

    - Creating a Web Page Controller with the HMVC...
    - Coding Controllers and Views for the HMVC De...
    - A Sample Web Application with the HMVC Desig...
    - Adding a Class to Parse Views to an HMVC Des...
    - Building a Model Class for the HMVC Design P...
    - Filtering Input Data and Generating HTML For...
    - The HMVC Design Pattern: Working with MySQL ...
    - Dispatching Requests to MVC Triads with the ...
    - Implementing the Hierarchical Model-View-Con...
    - A Web App Based on a Model for the CodeIgnit...
    - Completing a Model for the CodeIgniter PHP F...
    - Validating Input Data with the CodeIgniter P...
    - Deleting Database Records with the CodeIgnit...
    - Inserting Database Records with a CodeIgnite...
    - Fetching Database Rows with a Model for the ...


    © 2003-2012 by Developer Shed. All rights reserved. DS Cluster 7 - Follow our Sitemap