Added documentation for schema files.
This commit is contained in:
parent
c3c4a284a0
commit
293e752611
@ -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
|
||||||
|
@ -0,0 +1,184 @@
|
|||||||
|
++ 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>
|
Loading…
x
Reference in New Issue
Block a user