115 lines
3.8 KiB
PHP
115 lines
3.8 KiB
PHP
<?php
|
|
|
|
|
|
class Doctrine_Inheritance_SingleTable_TestCase extends Doctrine_UnitTestCase
|
|
{
|
|
public function prepareData()
|
|
{ }
|
|
|
|
public function prepareTables()
|
|
{
|
|
$this->tables[] = 'STI_User';
|
|
$this->tables[] = 'STI_Manager';
|
|
$this->tables[] = 'STI_Customer';
|
|
$this->tables[] = 'STI_SuperManager';
|
|
parent::prepareTables();
|
|
}
|
|
|
|
public function testMetadataSetup()
|
|
{
|
|
$userTable = $this->conn->getTable('STI_User');
|
|
$superManagerTable = $this->conn->getTable('STI_SuperManager');
|
|
$managerTable = $this->conn->getTable('STI_Manager');
|
|
$customerTable = $this->conn->getTable('STI_Customer');
|
|
|
|
$this->assertTrue($superManagerTable === $userTable);
|
|
$this->assertTrue($customerTable === $managerTable);
|
|
$this->assertTrue($superManagerTable === $managerTable);
|
|
$this->assertTrue($userTable === $customerTable);
|
|
$this->assertEqual(7, count($userTable->getColumns()));
|
|
|
|
$this->assertEqual(array(), $userTable->getOption('joinedParents'));
|
|
$this->assertEqual(array(), $superManagerTable->getOption('joinedParents'));
|
|
$this->assertEqual(array(), $managerTable->getOption('joinedParents'));
|
|
$this->assertEqual(array(), $customerTable->getOption('joinedParents'));
|
|
|
|
// check inheritance map
|
|
$this->assertEqual(array(
|
|
'STI_User' => array('type' => 1),
|
|
'STI_Manager' => array('type' => 2),
|
|
'STI_Customer' => array('type' => 3),
|
|
'STI_SuperManager' => array('type' => 4)), $userTable->getOption('inheritanceMap'));
|
|
|
|
//var_dump($superManagerTable->getComponentName());
|
|
}
|
|
|
|
public function testSave()
|
|
{
|
|
$manager = new STI_Manager();
|
|
$manager->salary = 80000;
|
|
$manager->name = 'John Smith';
|
|
try {
|
|
$manager->save();
|
|
$this->assertEqual(1, $manager->id);
|
|
$this->assertEqual(80000, $manager->salary);
|
|
$this->assertEqual('John Smith', $manager->name);
|
|
$this->assertEqual(2, $manager->type);
|
|
} catch (Exception $e) {
|
|
$this->fail("Saving record in single table inheritance failed: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
public function testQuery()
|
|
{
|
|
//$this->_createManager();
|
|
$query = $this->conn->createQuery();
|
|
$query->select("m.*")->from("STI_Manager m");
|
|
//echo $query->getSql();
|
|
//$managers = $query->execute();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
class STI_User extends Doctrine_Record
|
|
{
|
|
public function setTableDefinition()
|
|
{
|
|
$this->setInheritanceType(Doctrine::INHERITANCETYPE_SINGLE_TABLE,
|
|
array('STI_User' => array('type' => 1),
|
|
'STI_Manager' => array('type' => 2),
|
|
'STI_Customer' => array('type' => 3),
|
|
'STI_SuperManager' => array('type' => 4))
|
|
);
|
|
$this->setTableName('sti_entity');
|
|
$this->hasColumn('sti_id as id', 'integer', 4, array('primary' => true, 'autoincrement' => true));
|
|
$this->hasColumn('sti_foo as foo', 'integer', 4);
|
|
$this->hasColumn('sti_name as name', 'varchar', 50);
|
|
$this->hasColumn('type', 'integer', 4);
|
|
}
|
|
}
|
|
|
|
class STI_Manager extends STI_User
|
|
{
|
|
public function setTableDefinition()
|
|
{
|
|
$this->hasColumn('stim_salary as salary', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class STI_Customer extends STI_User
|
|
{
|
|
public function setTableDefinition()
|
|
{
|
|
$this->hasColumn('stic_bonuspoints as bonuspoints', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class STI_SuperManager extends STI_Manager
|
|
{
|
|
public function setTableDefinition()
|
|
{
|
|
$this->hasColumn('stism_gosutitle as gosutitle', 'varchar', 50, array());
|
|
}
|
|
}
|