Commit 293e7526 authored by Jonathan.Wage's avatar Jonathan.Wage

Added documentation for schema files.

parent c3c4a284
...@@ -12,9 +12,10 @@ ...@@ -12,9 +12,10 @@
+ Event listeners + Event listeners
+ Class templates + Class templates
+ Plugins + Plugins
+ File Parser + File parser
+ Migration + Migration
+ Data Fixtures + Data fixtures
+ Schema Files
+ Searching + Searching
+ Database abstraction + Database abstraction
+ Improving Performance + Improving Performance
......
++ Introduction
The purpose of schema files is to allow you to manage your model definitions directly from a yaml file rather then editing php code. The yaml schema file is parsed and used to generate all your model definitions/classes.
++ Example Schema File
'tableName' and 'className' are optional. If not specified they will be set by the key of the yaml block
schema.yml
<code type="yml">
---
User:
columns:
id:
notnull: true
primary: true
autoincrement: true
type: integer
length: 4
name: id
username:
type: string
length: 255
relations:
Groups:
class: Group
refClass: UserGroup
local: user_id
foreign: group_id
type: many
UserGroup:
columns:
user_id:
type: integer
length: 4
primary: true
group_id:
type: integer
length: 4
primary: true
relations:
User:
local: user_id
foreign: id
Group:
local: group_id
foreign: id
Group:
columns:
id:
notnull: true
primary: true
autoincrement: true
type: integer
length: 4
name: id
name:
type: string
length: 255
relations:
Users:
class: User
refClass: UserGroup
local: group_id
foreign: user_id
type: many
</code>
And now we want to use some Doctrine code to parse that schema yml file and generate our models from it
<code type="php">
// This code will generate the models for schema.yml at /path/to/generate/models
$import = new Doctrine_Import_Schema();
$import->importSchema('schema.yml', 'yml', '/path/to/generate/models');
</code>
This is the directory structure that would be generated at /path/to/generate/models
<code>
- Group.class.php
- User.class.php
- UserGroup.class.php
- generated
- BaseGroup.class.php
- BaseUser.class.php
- BaseUserGroup.class.php
</code>
And finally here is the code for each of the generated models
<code type="php">
// Group.class.php
/**
* This class has been auto-generated by the Doctrine ORM Framework
*/
class Group extends BaseGroup
{
}
// User.class.php
/**
* This class has been auto-generated by the Doctrine ORM Framework
*/
class User extends BaseUser
{
}
// BaseGroup.class.php
/**
* This class has been auto-generated by the Doctrine ORM Framework
*/
abstract class BaseGroup extends sfDoctrineRecord
{
public function setTableDefinition()
{
$this->setTableName('group');
$this->hasColumn('id', 'integer', 4, array('notnull' => true,
'primary' => true,
'autoincrement' => true));
$this->hasColumn('name', 'string', 255);
}
public function setUp()
{
$this->hasMany('User as Users', array('refClass' => 'UserGroup',
'local' => 'group_id',
'foreign' => 'user_id'));
}
}
// BaseUser.class.php
/**
* This class has been auto-generated by the Doctrine ORM Framework
*/
abstract class BaseUser extends sfDoctrineRecord
{
public function setTableDefinition()
{
$this->setTableName('user_table');
$this->hasColumn('id', 'integer', 4, array('notnull' => true,
'primary' => true,
'autoincrement' => true));
$this->hasColumn('username', 'string', 255);
}
public function setUp()
{
$this->hasMany('Group as Groups', array('refClass' => 'UserGroup',
'local' => 'user_id',
'foreign' => 'group_id'));
}
}
// BaseUserGroup.class.php
/**
* This class has been auto-generated by the Doctrine ORM Framework
*/
abstract class BaseUserGroup extends sfDoctrineRecord
{
public function setTableDefinition()
{
$this->setTableName('user_group');
$this->hasColumn('user_id', 'integer', 4, array('primary' => true));
$this->hasColumn('group_id', 'integer', 4, array('primary' => true));
}
public function setUp()
{
$this->hasOne('User', array('local' => 'user_id',
'foreign' => 'id'));
$this->hasOne('Group', array('local' => 'group_id',
'foreign' => 'id'));
}
}
</code>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment