| 
<?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
 );
 ?>
 |