PHP Classes

File: example.php

Recommend this page to a friend!
  Classes of Jake Grimley   My Active Record   example.php   Download  
File: example.php
Role: Example script
Content type: text/plain
Description: example script featuring various methods
Class: My Active Record
Map objects to MySQL database table rows
Author: By
Last change: changed to include v 0.4 not v 0.3
Date: 17 years ago
Size: 4,187 bytes
 

Contents

Class file image Download
<?php

/*

This PHP file illustrates many of the features of MyActiveRecord.
Create a blank database on your database server, and alter the database
connection string below, in order to try it out.

This script will create the necessary database tables the first time it is
run.

*/

// Connection string (change this)
define('MYACTIVERECORD_CONNECTION_STR', 'mysql://user:pass@localhost/myartest');

// Include MyActiveRecord
include 'MyActiveRecord.0.4.php';

// Create the database tables
$car_sql = "
CREATE TABLE `car`
(
  `id` int(11) NOT NULL auto_increment,
  `make` varchar(50) NOT NULL default '',
  `model` varchar(50) NOT NULL default '',
  `colour` varchar(50) default NULL,
  `driver_id` int(11) default NULL,
  PRIMARY KEY (`id`)
)
"
;

$driver_sql = "
CREATE TABLE `driver`
(
  `id` int(11) NOT NULL auto_increment,
  `first` varchar(50) default NULL,
  `last` varchar(50) default NULL,
  `class` varchar(50) default NULL,
  PRIMARY KEY (`id`)
)
"
;

$car_driver_sql = "
CREATE TABLE `car_driver`
(
  `car_id` int(11) default NULL,
  `driver_id` int(11) default NULL,
  KEY `car_id` (`car_id`),
  KEY `driver_id` (`driver_id`)
)
"
;

// create Car Table
if( !MyActiveRecord::TableExists('car') )
{
   
MyActiveRecord::Query($car_sql);
    print
"Created `car` Table\n";
}

// create Driver Table
if( !MyActiveRecord::TableExists('driver') )
{
   
MyActiveRecord::Query($driver_sql);
    print
"Created `driver` Table\n";
}

// create Car_Driver Table
if( !MyActiveRecord::TableExists('car_driver') )
{
   
MyActiveRecord::Query($car_driver_sql);
    print
"Created `car_driver` Table\n";
}

// Create mapping classes
class Car extends MyActiveRecord
{
    function
destroy()
    {
       
// clean up attached People (drivers) on destroy
       
foreach( $this->find_attached('Driver') as $driver ) $this->detach($driver);
        return
parent::destroy();
    }
}

class
Driver extends MyActiveRecord
{
    function
destroy()
    {
       
// clean up attached (driven) cars on destroy
       
foreach( $this->find_attached('Car') as $car ) $this->detach($car);
        return
parent::destroy();
    }
}

// Single Table Inheritance
class FemaleDriver extends Driver {}
class
MaleDriver extends Driver {}

// Delete any existing data from tables
foreach( MyActiveRecord::FindAll('Car') as $car ) $car->destroy();
foreach(
MyActiveRecord::FindAll('Driver') as $driver ) $driver->destroy();

// Create cars
$ka = MyActiveRecord::Create('Car', array('make'=>'Ford', 'model'=>'Ka', colour=>'Silver') );
$ka->save();

$c4 = MyActiveRecord::Create('Car', array('make'=>'Citroen', 'model'=>'C4', colour=>'Silver') );
$c4->save();

// Create drivers
$jake = MyActiveRecord::Create('MaleDriver', array('first'=>'Jake', 'last'=>'Grimley') );
$jake->save();

$jana = MyActiveRecord::Create('FemaleDriver', array('first'=>'Jana', 'last'=>'Grimley') );
$jana->save();

// One-to-many relationships
$ka->driver_id = $jana->id; // Jana owns the Ford Ka
$ka->save();

$c4->driver_id = $jake->id; // Jake owns the Citroen C4
$c4->save();

// Many-to-many relationships
// Jake is allowed to drive the C4 and the Ka
MyActiveRecord::link($c4, $jake);
$ka->attach($jake);

// Jana is allowed to drive the C4 and the Ka
$jana->set_attached('Car', array($c4->id, $ka->id));

// Display cars and drivers with relationships
print "Drivers:\n";
foreach(
MyActiveRecord::FindAll('Driver') as $driver )
{
   
$driver->owns = $driver->find_children('Car');
   
$driver->drives = $driver->find_attached('Car');
   
print_r($driver);
}
print
"Cars:\n";
foreach(
MyActiveRecord::FindAll('Car') as $car )
{
   
$car->owner = $car->find_parent('Driver');
   
$car->drivers = $car->find_attached('Driver');
   
print_r($car);
}
// show car colours
foreach( MyActiveRecord::FreqDist('Car', 'colour') as $colour=>$total )
{
    print
"There are $total $colour coloured cars\n";
}
$ka->validate_uniqueness_of('colour')
    or print
"The Colour of the Ford Ka is not unique\n";

// Clean up data
foreach( MyActiveRecord::FindAll('Car') as $car ) $car->destroy();
foreach(
MyActiveRecord::FindAll('Driver') as $driver ) $driver->destroy();

?>