PHP Classes
Icontem

File: DAOFormatter.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Christian Velin  >  DbCodeBuilder  >  DAOFormatter.class.php  
File: DAOFormatter.class.php
Role: Class source
Content type: text/plain
Description: Code generator for DAOs
Class: DbCodeBuilder
Generate code to access databases as data objects
 

Contents

Class file image Download
<?php
/**
 * A class to generate data access objects from database tables.
 * 
 * @author Christian Velin, christian.velin@conjurer.org
 * @version 0.2
 * @since 0.1 Added phpdoc tags to each generated variable and method.
 * @package DbCodeBuilder
 * 
 * Copyright (C) 2007  Christian Velin
 *
 * This program is free software; distributed under the artistic license.
 */
class DAOFormatter
{
    
/**
     * The String variable to store all the generated code.
     *
     * @var String
     */
    
private $output;
    
    
    
public function __construct($tables$columns)
    {
        
$this -> generate($tables$columns);
    }
    
    
    
    
/**
     * Master method to produce workable DAO's to work with VO's.
     *
     * @param Array $tables array of the tables in the db.
     * @param Array $columns recursive array containing all column information.
     */
    
private function generate($tables$columns)
    {
        for (
$i 0$i sizeOf($tables); $i++)
        {
            
$this->output .= '============ ' ucfirst($tables[$i]) . '.DAO.php ============<br><br>';
            
$this->output .= 'require_once(\'' ucfirst($tables[$i]) . '.VO.php\');<br>';
            
$this->output .= '/**<br>';
            
$this->output .= ' *<br>'
            
$this->output .= ' */<br>';
            
$this->output .= 'class ' ucfirst($tables[$i]) . 'DAO<br>';
            
$this->output .= '{<br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @var unknown_type<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    private $link;<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $link<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    public function __construct($link)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= '        $this -> link = $link;<br>';
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $vo<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    public function save($vo)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= '        if ($vo->get' ucfirst($columns[$i][0]['Field']) . '() == 0)<br>';
            
$this->output .= '        {<br>';
            
$this->output .= '            $this->insert($vo);<br>';
            
$this->output .= '        }<br>';
            
$this->output .= '        else<br>';
            
$this->output .= '        {<br>';
            
$this->output .= '            $this->update($vo);<br>';
            
$this->output .= '        }<br>';
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param Integer $id<br>';
            
$this->output .= '     * @return unknown_type<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    public function get($id)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= '        $sql = \'SELECT * FROM ' $tables[$i] . ' WHERE ' $columns[$i][0]['Field'] . ' = \' . $id;<br>';
            
$this->output .= '        $query = mysql_query($sql, $this->link);<br>';
            
$this->output .= '        $result = mysql_fetch_assoc($query);<br>';
            
$this->output .= '        $vo = new ' ucfirst($tables[$i]) . 'VO();<br>';
            
$this->output .= '        $this->getFromResult($vo, $result);<br>';
            
$this->output .= '        return $vo;<br>';
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $vo<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    public function delete($vo)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= '        $sql = \'DELETE FROM ' $tables[$i] . ' WHERE ' $columns[$i][0]['Field'] . ' = \' . $vo->get' ucfirst($columns[$i][0]['Field']) . '();<br>';
            
$this->output .= '        $result = mysql_query($sql, $this->link);<br>';
            
$this->output .= '        $vo->set' ucfirst($columns[$i][0]['Field']) . '(0);<br>';
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $vo<br>';
            
$this->output .= '     * @param unknown_type $result<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    private function getFromResult($vo, $result)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= $this->generateUpdateVO($i$columns);
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $vo<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    private function update($vo)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= $this->generateUpdateQuery($i$tables$columns);
            
$this->output .= '        mysql_query($sql, $this->link) or die (mysql_error());<br>';
            
$this->output .= '    }<br><br><br><br>';
            
$this->output .= '    /**<br>';
            
$this->output .= '     * Enter description here...<br>';
            
$this->output .= '     *<br>';
            
$this->output .= '     * @param unknown_type $vo<br>';
            
$this->output .= '     */<br>';
            
$this->output .= '    private function insert($vo)<br>';
            
$this->output .= '    {<br>';
            
$this->output .= $this->generateInsertQuery($i$tables$columns);
            
$this->output .= '        mysql_query($sql, $this->link) or die (mysql_error());<br>';
            
$this->output .= '        $vo->setId(mysql_insert_id());<br>';
            
$this->output .= '    }<br>';
            
$this->output .= '}<br>';
            
$this->output .= '============ ' ucfirst($tables[$i]) . '.DAO.php ============<br><br>';
        }
    }
    
    
    
    
/**
     * Method to generate code needed to update the corresponding VO class.
     *
     * @param Integer $i keeps track of which table for which we are constructing a DAO.
     * @param Array $columns recursive array containing all column information.
     * @return String the generated code for updating a VO class.
     */
    
private function generateUpdateVO($i$columns)
    {
        
$method '';
        for (
$j 0$j sizeOf($columns[$i]); $j++)
        {
            
$method .= '$vo->set' ucfirst($columns[$i][$j]['Field']) . '($result[\'' $columns[$i][$j]['Field'] . '\']);<br>';
        }
        return 
$method;
    }
    
    
    
    
/**
     * Method to generate the update query used to update the db from a VO class.
     *
     * @param Integer $i keeps track of which table for which we are constructing a DAO.
     * @param Array $tables array of the tables in the db.
     * @param Array $columns recursive array containing all column information.
     * @return String the generated update query.
     */
    
private function generateUpdateQuery($i$tables$columns)
    {
        
$query '$sql = \'UPDATE ' $tables[$i] . ' SET ';
        
$size sizeOf($columns[0])-1;
        for (
$j 0$j $size$j++)
        {
            
$query .= $columns[$i][$j]['Field'] .' = \\\'\'.$vo->get' ucfirst($columns[$i][$j]['Field']) . '().\'\\\', ';
        }
        
$query .= $columns[$i][$size]['Field'] .' = \\\'\'.$vo->get' ucfirst($columns[$i][$size]['Field']) . '().\'\\\'';
        
$query .=  ' WHERE ' $columns[$i][0]['Field'] . ' = \\\'\'.$vo->get' ucfirst($columns[$i][0]['Field']) . '().\'\\\'\';<br>';
        return 
$query;
    }
    
    
    
    
/**
     * Method to generate the insert query used to create a new row in the db from a VO class.
     *
     * @param Integer $i keeps track of which table for which we are constructing a DAO.
     * @param Array $tables array of the tables in the db.
     * @param Array $columns recursive array containing all column information.
     * @return String the generated insert query.
     */
    
private function generateInsertQuery($i$tables$columns)
    {
        
$query '$sql = \'INSERT INTO ' $tables[$i] . ' (';
        
$size sizeOf($columns[0])-1;
        for (
$j 1$j $size$j++)
        {
            
$query .= $columns[$i][$j]['Field'] . ', ';
        }
        
$query .= $columns[$i][$size]['Field'] . ') VALUES (';
        for (
$j 1$j $size$j++)
        {
            
$query .= '\\\'\'.$vo->get' ucfirst($columns[$i][$j]['Field']) . '().\'\\\', ';
        }
        
$query .= '\\\'\'.$vo->get' ucfirst($columns[$i][$size]['Field']) . '().\'\\\')\';<br>';
        return 
$query;
    }
    
    
    
    
/**
     * Method to get the generated code.
     *
     * @return String the generated DAO(s).
     */
    
public function getOutput()
    {
        return 
$this->output;
    }
}
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products