Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

среда, 22 сентября 2010 г.

ORM Doctrine. Простое наследование (simple inheritance).

Это самый простой в использовании тип наследования. Дочерние классы хранять свои данные в тех же таблицах, что и родительские, и имеют те же атрибуты (колонки таблиц).


// models/Entity.php

class Entity extends Doctrine_Record
{
public function setTableDefinition()
{
$this->hasColumn('name', 'string', 30);
$this->hasColumn('username', 'string', 20);
$this->hasColumn('password', 'string', 16);
$this->hasColumn('created_at', 'timestamp');
$this->hasColumn('update_at', 'timestamp');
}
}



Теперь создаем модель User, расширяющую (наследующую) Entity ...


// models/User.php

class User extends Entity
{ }


И тоже самое для класса Group ...

// models/Group.php

class Group extends Entity
{ }



Вот так это будет выглядеть в формате YAML:

---
# schema.yml

# ...
Entity:
columns:
name: string(30)
username: string(20)
password: string(16)
created_at: timestamp
updated_at: timestamp

User:
inheritance:
extends: Entity
type: simple

Group:
inheritance:
extends: Entity
type: simple


Если посмотреть на SQL, который генерируют эти модели ...

// test.php

// ...
$sql = Doctrine_Core::generateSqlFromArray(array('Entity', 'User', 'Group'));
echo $sql[0];



... то в обоих случаях будет следующее:

CREATE TABLE entity (id BIGINT AUTO_INCREMENT,
username VARCHAR(20),
password VARCHAR(16),
created_at DATETIME,
updated_at DATETIME,
name VARCHAR(30),
PRIMARY KEY(id)) ENGINE = INNODB

Комментариев нет:

Отправить комментарий