<?php 
 
    /** 
    * PTCMAPPER OBJECT RELATIONAL MAPPING CLASS EXAMPLE FILE 
    * PTCMAPPER DEPENDS ON PTCDB AND PTCQUERYBUILDER COMPONENTS 
    * THEREFORE, IT IS NOT A STAND-ALONE CLASS 
    * 
    * OBSERVERS CAN BE ADDED TO THE CLASS WITH THE PTCEVENT COMPONENT 
    * 
    */ 
 
    /*** DB DETAILS NEEDED FOR THE EXAMPLE TO WORK ***/ 
    $db[ 'user' ] = 'user';                // mysql user 
    $db[ 'pass' ] = 'pass';                // mysql pass 
    $db[ 'database' ] = 'database';        // mysql database name 
    /*************************************************************/ 
     
    require_once( '../PtcDb.php' ); // including the PtcDb class 
 
    /* ADDING DATABASE CONNECTION WITH THE QUERY BUILDER CLASS SUPPORT */ 
    require_once( '../PtcQueryBuilder.php' ); // including the Query Builder class 
    PtcDb::add( array 
    ( 
        'user'            =>    $db[ 'user' ], 
        'pass'            =>    $db[ 'pass' ], 
        'db'            =>    $db[ 'database' ], 
        'query_builder'    =>    true,    // initialize the query builder 
    ) ); 
     
    /* CREATE THE EXAMPLE TABLE */ 
    PtcDb::run( "DROP TABLE IF EXISTS `test_table`" ); 
    PtcDb::run( "CREATE TABLE `test_table`  
    ( 
        `id` int NOT NULL AUTO_INCREMENT,  
        PRIMARY KEY(`id`), 
        `field1` varchar(255), 
        `field2` varchar(255) 
    )" ); 
 
 
    require_once( '../PtcMapper.php' ); // including the ORM class 
 
 
    /* EXTENDING THE CLASS WITH THE TABLE NAME */ 
    class Test_Table extends PtcMapper 
    { 
        /* USING THE CLASS NAME AS TABLE */ 
        //protected static $_table = '';  
         
        /* MAP FIELD NAMES IF "AS" IS USED IN A SELECT QUERY */ 
        //protected static $_map = array( 'field1' => 'test' );  
     
        /* USE THIS PROPERTY IF THE TABLE USES ANOTHER  
        *  COLUMN NAME FOR THE PRIMARY KEY */ 
        //protected static $_uniqueKey = 'id'; 
         
        /* OBSERVER EXAMPLE, WORKS WITH PTCEVENT COMPONENT */ 
        public static function saved( $data , $result ) 
        { 
            // do some stuff here after save( ) is called 
            //var_dump( $result ); 
            //var_dump( $data ); 
        } 
    } 
     
     
    /* USING OBSERVERS WITH PTCEVENT COMPONENT */ 
    //Test_Table::observe( ); // observe events 
    //Test_Table::observe( 'some_class' ); // use other class as observer 
     
     
    /* ADDING NEW RECORDS */ 
    $data = new Test_Table( ); 
    $data->field1 = 'some value'; 
    $data->field2 = 'some other value'; 
    $data->save( ); 
     
 
    /* CREATING NEW RECORD FROM ASSOCIATIVE ARRAY */ 
    $arr = array( 'field1' => 'created from array' , 'field2' => 'created from array' ); 
    $created = Test_Table::create( $arr ); 
    $created->save( ); 
    //Test_Table::create( $arr )->save( ); // in 1 line 
 
     
    /* LAST INSERTED ID */ 
    print "<br><br><b>Last inserted id:</b> ";  
    print $last_id = Test_Table::lastId( ); 
    print "<br><br>"; 
     
     
    /* RETRIEVING 1 ROW BASED ON ID */ 
    $data = Test_Table::find( 1 ); 
    print "<b>Getting 1 row:</b><br>"; 
    print $data->field1 . "<br>"; 
    print $data->field2 . "<br><br>"; 
     
     
    /* RETRIEVING ALL RECORDS FROM TABLE */ 
    $data = Test_Table::all( ); 
    print "<b>Looping through all records:</b><br>"; 
    foreach( $data as $v ) 
    { 
        print $v->field1 . "<br>"; 
        print $v->field2 . "<br>"; 
    } 
    print "<br>"; 
     
     
    /* UPDATING RECORDS */ 
    $data = Test_Table::find( $last_id ); 
    $data->field1 = 'updated value'; 
    $data->field2 = 'updated value'; 
    $data->save( ); 
     
     
    /* DELETING RECORDS */ 
    $data = Test_Table::find( $last_id ); 
    $data->delete( ); // delete retrieved record 
    //Test_Table::find( $last_id )->delete( ); // same as above but in 1 line 
    //Test_Table::where('field1', '!=', 'some value' )->delete()->run( ); // using the query builder directly 
     
     
    /* RETRIEVING ONLY 1 COLUMN VALUE */ 
    print '<b>Retrieve 1 column value based on id:</b> '; 
    print Test_Table::get_field1( 1 ); // retrieving by id 
    print "<br><br><b>Retrieving 1 column value based on query:</b> "; 
    print Test_Table::get_field2( 'field1' , 'some value' ); // select field2 where field1 = 'some value' 
    print "<br><br>"; 
     
     
    /* UPDATING ONLY 1 COLUMN VALUE BASED ON ID */ 
    Test_Table::set_field1( 'new value saved' , 1 ); // set field1 = 'new value saved' where id = 1 
     
 
    /* USING THE QUERY BUILDER METHODS DIRECTLY */ 
    $data = Test_Table::where( 'id' , '!=' , 2 )->run( ); 
    print "<b>Using the query builder directly:</b><br>"; 
    foreach( $data as $v ) 
    { 
        print $v->field1 . "<br>"; 
        print $v->field2 . "<br>"; 
        /* CONVERT TO ARRAY */ 
        $to_arr = $v->toArray( ); 
        /* CONVERT TO JSON */ 
        $to_json = $v->toJson( ); 
    } 
    print "<br>"; 
     
     
    /* GET THE COLUMN NAMES */ 
    print "<b>Getting table column names:</b> <pre>"; 
    print print_r( Test_Table::getColumns( ) , true ) . "</pre><br>"; 
 
 |