<?php 
 
    $connection = mysql_connect( 
        "localhost", 
        "root", 
        "" 
    ); 
     
    mysql_select_db( 
        "test", 
        $connection 
    ); 
 
    ////////////////////////////////////////////////////////////////////// 
    // 
    //    MySQL tables used in the following examples. 
    // 
    ////////////////////////////////////////////////////////////////////// 
    /*     
        CREATE TABLE `categories` ( 
          `id` int(11) NOT NULL auto_increment, 
          `title` varchar(255) NOT NULL default '', 
          `description` varchar(255) NOT NULL default '', 
          PRIMARY KEY  (`id`) 
        ) ENGINE=MyISAM; 
         
        INSERT INTO `categories`( 
            `title`, 
            `description` 
        ) VALUES ( 
            'General', 
            'This is the general category.' 
        ); 
         
        CREATE TABLE `articles` ( 
          `id` int(11) NOT NULL auto_increment, 
          `category_id` int(11) NOT NULL default '0', 
          `title` varchar(255) NOT NULL default '', 
          `introduction` varchar(255) NOT NULL default '', 
          `article` varchar(255) NOT NULL default '', 
          PRIMARY KEY  (`id`) 
        ) ENGINE=MyISAM; 
 
        INSERT INTO `articles`( 
            `category_id`, 
            `title`, 
            `introduction`, 
            `article` 
        ) VALUES ( 
            1, 
            'Hello, World!', 
            'The introduction of the lame hello, world article.', 
            'The article body of the lame hello, world article.' 
        ); 
 
        CREATE TABLE `comments` ( 
          `id` int(11) NOT NULL auto_increment, 
          `article_id` int(11) NOT NULL default '0', 
          `comment` varchar(255) NOT NULL default '', 
          PRIMARY KEY  (`id`) 
        ) ENGINE=MyISAM; 
         
        INSERT INTO `comments`( 
            `article_id`, 
            `comment` 
        ) VALUES ( 
            1, 
            'First comment!' 
        ); 
         
        INSERT INTO `comments`( 
            `article_id`, 
            `comment` 
        ) VALUES ( 
            1, 
            'Second comment!' 
        ); 
    */ 
    ////////////////////////////////////////////////////////////////////// 
     
     
     
     
    ////////////////////////////////////////////////////////////////////// 
    // 
    //    Extend the class using a database table name as class name. The class 
    //    name need not be the exact capitalization of the table name. 
    // 
    ////////////////////////////////////////////////////////////////////// 
 
        // Require the class to be extended. 
        require_once("mysql_model.class.php"); 
 
        class Articles extends MySQL_Model 
        { 
            // Handle id and auto arguments in the constructor. 
            function Articles($id = 0, $auto = "") 
            { 
                // Initialize the Model class with proper arguments. 
                $this -> init($id, $auto); 
                 
                $this -> belongs_to_one( 
                    "categories", // The `categories` table. 
                    "id", // The foreign key in the `categories` table. 
                    "category_id" // The key in the `articles` table. 
                ); 
                 
                $this -> has_many( 
                    "comments", // The `comments` table. 
                    "article_id" // The foreign key in the `comments` table. 
                    // Assumed is the auto key in the `articles` table. 
                ); 
            } 
        } 
     
    ////////////////////////////////////////////////////////////////////// 
     
     
     
     
    ////////////////////////////////////////////////////////////////////// 
    // 
    //    Find all articles. 
    // 
    ////////////////////////////////////////////////////////////////////// 
     
        $a = new Articles(); 
        $articles = $a -> find(); 
         
        // Loop through the articles, printing them to the screen. 
        for($i = 0; $i < count($articles); $i++) 
        { 
            echo $articles[$i]["categories"]["title"] . "\t"; 
            echo $articles[$i]["title"] . "\n"; 
        } 
     
    ////////////////////////////////////////////////////////////////////// 
     
     
     
     
    ////////////////////////////////////////////////////////////////////// 
    // 
    //    Attempt to create a new record. Cause an error to be generated when  
    //    `category_id` is not provided. 
    // 
    //    NOTE: If a column does not allow NULL values, it is considered by 
    //    the MySQL_Model class to be required. 
    // 
    //    The only thing we must do after catching the error is set `category_id` 
    //    to some value and attempt to save() again. The data persists after 
    //    the call to save(). 
    // 
    //    NOTE: If you provide an `id` to the Articles constructor and eventually 
    //    call save(), this will update the record, not create a new one. 
    // 
    ////////////////////////////////////////////////////////////////////// 
     
        $a = new Articles(); 
         
        // Set fields, leaving one blank to cause an error. 
        $a -> set("category_id", 0); 
        $a -> set("title", "..."); 
        $a -> set("introduction", "..."); 
        $a -> set("article", "..."); 
         
        // Save and catch errors in data validation. 
        if(!$a -> save()) 
        { 
            // Print the error array to the screen. 
            print_r($a -> error()); 
        } 
         
    ////////////////////////////////////////////////////////////////////// 
     
     
    ////////////////////////////////////////////////////////////////////// 
    // 
    //    Display managed data structure. 
    // 
    //    Assuming an Article with the `id` '1' exists, this will look in the 
    //    `categories` and `comments` tables and attach all records matching: 
    // 
    //        "articles.category_id = categories.id" 
    //            and 
    //        "articles.id = comments.article_id" 
    // 
    //    This is considered a lazy join due to the absence of an actual join 
    //    clause in the sql. This allows for much simpler code and the ability to 
    //    greatly modify the behavior of values returned by this kind of join. 
    // 
    //    You will note that after printing out the fields array there is a new 
    //     field titled 'comments' which contains an array of values found in the 
    //    `comments` table. 
    // 
    //    You will also notice a single array has been attached called 
    //    `categories` which contains the record found in the `categories` table. 
    // 
    //    NOTE: When using has_many(), the attached array will be an array of  
    //    assoc array's. When using has_one(), the attached array will be an 
    //    assoc array. 
    // 
    //    NOTE: You can call these functions as many times as you'd like. It 
    //    simply continues to add to the fields. 
    // 
    ////////////////////////////////////////////////////////////////////// 
     
        $a = new Articles(1); 
        print_r($a -> get_fields()); 
     
    ////////////////////////////////////////////////////////////////////// 
     
     
    mysql_close( 
        $connection 
    ); 
?>
 
 |