2009-06-05 21:40:47 +00:00
< ? php
namespace Doctrine\Tests\ORM\Mapping ;
2016-05-11 01:55:12 +07:00
use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService ;
use Doctrine\ORM\EntityManager ;
2012-07-29 21:04:59 -03:00
use Doctrine\ORM\Events ;
2016-12-08 18:01:04 +01:00
use Doctrine\ORM\Mapping\ClassMetadata ;
2016-05-11 01:55:12 +07:00
use Doctrine\ORM\Mapping\ClassMetadataFactory ;
2016-12-08 18:01:04 +01:00
use Doctrine\ORM\Mapping\ClassMetadataInfo ;
use Doctrine\ORM\Mapping\DefaultNamingStrategy ;
2016-01-05 12:29:49 -05:00
use Doctrine\ORM\Mapping\DiscriminatorColumn ;
use Doctrine\ORM\Mapping\Id ;
2016-06-18 13:01:59 +02:00
use Doctrine\ORM\Mapping\MappingException ;
2016-05-11 01:55:12 +07:00
use Doctrine\ORM\Mapping\UnderscoreNamingStrategy ;
2013-02-13 20:42:13 -02:00
use Doctrine\Tests\Models\Cache\City ;
2016-12-08 18:01:04 +01:00
use Doctrine\Tests\Models\CMS\CmsAddress ;
use Doctrine\Tests\Models\CMS\CmsAddressListener ;
use Doctrine\Tests\Models\CMS\CmsUser ;
use Doctrine\Tests\Models\Company\CompanyContract ;
use Doctrine\Tests\Models\Company\CompanyContractListener ;
use Doctrine\Tests\Models\Company\CompanyFixContract ;
use Doctrine\Tests\Models\Company\CompanyFlexContract ;
use Doctrine\Tests\Models\Company\CompanyFlexUltraContract ;
use Doctrine\Tests\Models\Company\CompanyFlexUltraContractListener ;
use Doctrine\Tests\Models\Company\CompanyPerson ;
use Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType ;
2015-01-14 16:59:01 +01:00
use Doctrine\Tests\Models\DDC2825\ExplicitSchemaAndTable ;
use Doctrine\Tests\Models\DDC2825\SchemaAndTableInTableName ;
2016-12-08 18:01:04 +01:00
use Doctrine\Tests\Models\DDC3579\DDC3579Admin ;
use Doctrine\Tests\Models\DDC869\DDC869ChequePayment ;
use Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment ;
use Doctrine\Tests\Models\DDC869\DDC869PaymentRepository ;
use Doctrine\Tests\Models\DDC889\DDC889Class ;
use Doctrine\Tests\Models\DDC889\DDC889Entity ;
use Doctrine\Tests\Models\DDC964\DDC964Admin ;
use Doctrine\Tests\Models\DDC964\DDC964Guest ;
2016-05-11 01:55:12 +07:00
use Doctrine\Tests\OrmTestCase ;
2009-06-05 21:40:47 +00:00
2016-05-11 01:55:12 +07:00
abstract class AbstractMappingDriverTest extends OrmTestCase
2009-06-05 21:40:47 +00:00
{
2010-02-01 21:48:27 +00:00
abstract protected function _loadDriver ();
2010-09-23 23:10:31 +02:00
public function createClassMetadata ( $entityClassName )
2009-06-05 21:40:47 +00:00
{
2010-02-01 21:48:27 +00:00
$mappingDriver = $this -> _loadDriver ();
2010-09-23 23:10:31 +02:00
$class = new ClassMetadata ( $entityClassName );
2016-05-11 01:55:12 +07:00
$class -> initializeReflection ( new RuntimeReflectionService ());
2010-09-23 23:10:31 +02:00
$mappingDriver -> loadMetadataForClass ( $entityClassName , $class );
2010-02-01 21:48:27 +00:00
return $class ;
2009-08-13 11:03:26 +00:00
}
2010-02-01 21:48:27 +00:00
2012-03-25 13:34:52 -03:00
/**
* @ param \Doctrine\ORM\EntityManager $entityClassName
* @ return \Doctrine\ORM\Mapping\ClassMetadataFactory
*/
2016-05-11 01:55:12 +07:00
protected function createClassMetadataFactory ( EntityManager $em = null )
2012-03-25 13:34:52 -03:00
{
$driver = $this -> _loadDriver ();
$em = $em ? : $this -> _getTestEntityManager ();
2016-05-11 01:55:12 +07:00
$factory = new ClassMetadataFactory ();
2012-03-25 13:34:52 -03:00
$em -> getConfiguration () -> setMetadataDriverImpl ( $driver );
$factory -> setEntityManager ( $em );
return $factory ;
}
2010-09-23 23:10:31 +02:00
public function testLoadMapping ()
{
2016-12-08 18:01:04 +01:00
return $this -> createClassMetadata ( User :: class );
2010-09-23 23:10:31 +02:00
}
2010-02-01 21:48:27 +00:00
/**
* @ depends testLoadMapping
* @ param ClassMetadata $class
*/
public function testEntityTableNameAndInheritance ( $class )
2009-08-13 11:03:26 +00:00
{
2009-06-05 21:40:47 +00:00
$this -> assertEquals ( 'cms_users' , $class -> getTableName ());
2010-03-15 17:19:00 +00:00
$this -> assertEquals ( ClassMetadata :: INHERITANCE_TYPE_NONE , $class -> inheritanceType );
2010-02-01 21:48:27 +00:00
return $class ;
}
2010-06-13 22:59:56 +02:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testEntityIndexes ( $class )
{
$this -> assertArrayHasKey ( 'indexes' , $class -> table , 'ClassMetadata should have indexes key in table property.' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals (
[
'name_idx' => [ 'columns' => [ 'name' ]],
0 => [ 'columns' => [ 'user_email' ]]
], $class -> table [ 'indexes' ]);
2010-06-13 22:59:56 +02:00
return $class ;
}
2014-05-07 23:36:40 +09:00
public function testEntityIndexFlagsAndPartialIndexes ()
2014-03-08 00:22:35 +01:00
{
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( Comment :: class );
2014-03-08 00:22:35 +01:00
2016-12-07 23:33:41 +01:00
$this -> assertEquals (
[
0 => [
'columns' => [ 'content' ],
'flags' => [ 'fulltext' ],
'options' => [ 'where' => 'content IS NOT NULL' ],
]
], $class -> table [ 'indexes' ]);
2014-03-08 00:22:35 +01:00
}
2010-04-28 20:27:53 +02:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testEntityUniqueConstraints ( $class )
{
$this -> assertArrayHasKey ( 'uniqueConstraints' , $class -> table ,
'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.' );
2011-11-15 20:03:13 +01:00
2016-12-07 23:33:41 +01:00
$this -> assertEquals (
[
" search_idx " => [ " columns " => [ " name " , " user_email " ], 'options' => [ 'where' => 'name IS NOT NULL' ]]
], $class -> table [ 'uniqueConstraints' ]);
2010-04-28 20:27:53 +02:00
return $class ;
}
2010-05-01 03:28:18 +02:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
2012-01-26 14:36:56 +01:00
public function testEntityOptions ( $class )
{
$this -> assertArrayHasKey ( 'options' , $class -> table , 'ClassMetadata should have options key in table property.' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals (
[
'foo' => 'bar' , 'baz' => [ 'key' => 'val' ]
], $class -> table [ 'options' ]);
2012-01-26 14:36:56 +01:00
return $class ;
}
/**
* @ depends testEntityOptions
* @ param ClassMetadata $class
*/
2010-05-01 03:28:18 +02:00
public function testEntitySequence ( $class )
{
2011-02-19 19:50:58 -02:00
$this -> assertInternalType ( 'array' , $class -> sequenceGeneratorDefinition , 'No Sequence Definition set on this driver.' );
2010-05-01 03:28:18 +02:00
$this -> assertEquals (
2016-12-07 23:33:41 +01:00
[
2010-05-01 03:28:18 +02:00
'sequenceName' => 'tablename_seq' ,
'allocationSize' => 100 ,
'initialValue' => 1 ,
2016-12-07 23:33:41 +01:00
],
2010-05-01 03:28:18 +02:00
$class -> sequenceGeneratorDefinition
);
}
2011-11-30 00:20:00 +03:00
2011-11-28 21:41:54 +03:00
public function testEntityCustomGenerator ()
{
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( Animal :: class );
2011-11-30 00:20:00 +03:00
$this -> assertEquals ( ClassMetadata :: GENERATOR_TYPE_CUSTOM ,
2011-11-28 21:41:54 +03:00
$class -> generatorType , " Generator Type " );
$this -> assertEquals (
2016-12-07 23:33:41 +01:00
[ " class " => " stdClass " ],
2011-11-28 21:41:54 +03:00
$class -> customGeneratorDefinition ,
" Custom Generator Definition " );
}
2010-05-01 03:28:18 +02:00
2010-04-28 20:27:53 +02:00
2010-02-01 21:48:27 +00:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testFieldMappings ( $class )
{
2012-12-16 12:57:53 +01:00
$this -> assertEquals ( 4 , count ( $class -> fieldMappings ));
2009-06-05 21:40:47 +00:00
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'id' ]));
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'name' ]));
2010-02-01 21:48:27 +00:00
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'email' ]));
2012-12-16 12:57:53 +01:00
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'version' ]));
2010-02-01 21:48:27 +00:00
2010-06-22 20:24:05 +02:00
return $class ;
}
2012-12-16 12:57:53 +01:00
/**
* @ depends testFieldMappings
* @ param ClassMetadata $class
*/
public function testVersionedField ( $class )
{
$this -> assertTrue ( $class -> isVersioned );
$this -> assertEquals ( " version " , $class -> versionField );
2013-03-14 23:19:58 +01:00
$this -> assertFalse ( isset ( $class -> fieldMappings [ 'version' ][ 'version' ]));
2012-12-16 12:57:53 +01:00
}
2010-06-22 20:24:05 +02:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testFieldMappingsColumnNames ( $class )
{
$this -> assertEquals ( " id " , $class -> fieldMappings [ 'id' ][ 'columnName' ]);
$this -> assertEquals ( " name " , $class -> fieldMappings [ 'name' ][ 'columnName' ]);
$this -> assertEquals ( " user_email " , $class -> fieldMappings [ 'email' ][ 'columnName' ]);
return $class ;
}
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testStringFieldMappings ( $class )
{
2009-06-05 21:40:47 +00:00
$this -> assertEquals ( 'string' , $class -> fieldMappings [ 'name' ][ 'type' ]);
2010-06-22 20:24:05 +02:00
$this -> assertEquals ( 50 , $class -> fieldMappings [ 'name' ][ 'length' ]);
2010-01-27 23:00:55 +00:00
$this -> assertTrue ( $class -> fieldMappings [ 'name' ][ 'nullable' ]);
$this -> assertTrue ( $class -> fieldMappings [ 'name' ][ 'unique' ]);
2010-02-01 21:48:27 +00:00
2014-01-02 23:33:49 +01:00
return $class ;
}
/**
* @ depends testEntityTableNameAndInheritance
2016-11-16 20:01:11 +01:00
*
2014-01-02 23:33:49 +01:00
* @ param ClassMetadata $class
2016-11-16 20:01:11 +01:00
*
* @ return ClassMetadata
2014-01-02 23:33:49 +01:00
*/
2016-11-16 20:01:11 +01:00
public function testFieldOptions ( ClassMetadata $class )
2014-01-02 23:33:49 +01:00
{
2016-11-16 20:01:11 +01:00
$expected = [ 'foo' => 'bar' , 'baz' => [ 'key' => 'val' ], 'fixed' => false ];
2012-01-27 11:05:47 +01:00
$this -> assertEquals ( $expected , $class -> fieldMappings [ 'name' ][ 'options' ]);
2010-02-01 21:48:27 +00:00
return $class ;
}
2014-01-02 23:33:49 +01:00
/**
* @ depends testEntityTableNameAndInheritance
* @ param ClassMetadata $class
*/
public function testIdFieldOptions ( $class )
{
2016-11-16 20:01:11 +01:00
$this -> assertEquals ([ 'foo' => 'bar' , 'unsigned' => false ], $class -> fieldMappings [ 'id' ][ 'options' ]);
2014-01-02 23:33:49 +01:00
return $class ;
}
2010-02-01 21:48:27 +00:00
/**
* @ depends testFieldMappings
* @ param ClassMetadata $class
*/
public function testIdentifier ( $class )
{
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'id' ], $class -> identifier );
2011-11-15 20:03:13 +01:00
$this -> assertEquals ( 'integer' , $class -> fieldMappings [ 'id' ][ 'type' ]);
2010-03-15 17:19:00 +00:00
$this -> assertEquals ( ClassMetadata :: GENERATOR_TYPE_AUTO , $class -> generatorType , " ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO " );
2010-02-01 21:48:27 +00:00
return $class ;
}
2016-11-16 20:01:11 +01:00
/**
* @ group #6129
*
2016-11-17 21:05:58 +01:00
* @ depends testLoadMapping
2016-11-16 20:01:11 +01:00
*
* @ param ClassMetadata $class
*
* @ return ClassMetadata
*/
public function testBooleanValuesForOptionIsSetCorrectly ( ClassMetadata $class )
{
$this -> assertInternalType ( 'bool' , $class -> fieldMappings [ 'id' ][ 'options' ][ 'unsigned' ]);
$this -> assertFalse ( $class -> fieldMappings [ 'id' ][ 'options' ][ 'unsigned' ]);
$this -> assertInternalType ( 'bool' , $class -> fieldMappings [ 'name' ][ 'options' ][ 'fixed' ]);
$this -> assertFalse ( $class -> fieldMappings [ 'name' ][ 'options' ][ 'fixed' ]);
return $class ;
}
2010-02-01 21:48:27 +00:00
/**
* @ depends testIdentifier
* @ param ClassMetadata $class
*/
2013-03-11 00:08:58 +00:00
public function testAssociations ( $class )
2010-02-01 21:48:27 +00:00
{
2009-06-05 21:40:47 +00:00
$this -> assertEquals ( 3 , count ( $class -> associationMappings ));
2010-02-01 21:48:27 +00:00
return $class ;
}
/**
2013-03-11 00:08:58 +00:00
* @ depends testAssociations
2010-02-01 21:48:27 +00:00
* @ param ClassMetadata $class
*/
2013-03-11 00:08:58 +00:00
public function testOwningOneToOneAssociation ( $class )
2010-02-01 21:48:27 +00:00
{
2009-06-05 21:40:47 +00:00
$this -> assertTrue ( isset ( $class -> associationMappings [ 'address' ]));
2010-08-09 13:13:21 +02:00
$this -> assertTrue ( $class -> associationMappings [ 'address' ][ 'isOwningSide' ]);
$this -> assertEquals ( 'user' , $class -> associationMappings [ 'address' ][ 'inversedBy' ]);
2010-01-22 15:10:13 +00:00
// Check cascading
2010-08-09 13:13:21 +02:00
$this -> assertTrue ( $class -> associationMappings [ 'address' ][ 'isCascadeRemove' ]);
$this -> assertFalse ( $class -> associationMappings [ 'address' ][ 'isCascadePersist' ]);
$this -> assertFalse ( $class -> associationMappings [ 'address' ][ 'isCascadeRefresh' ]);
$this -> assertFalse ( $class -> associationMappings [ 'address' ][ 'isCascadeDetach' ]);
$this -> assertFalse ( $class -> associationMappings [ 'address' ][ 'isCascadeMerge' ]);
2010-02-01 21:48:27 +00:00
return $class ;
}
/**
2013-03-11 00:08:58 +00:00
* @ depends testOwningOneToOneAssociation
2010-02-01 21:48:27 +00:00
* @ param ClassMetadata $class
*/
public function testInverseOneToManyAssociation ( $class )
{
2009-06-05 21:40:47 +00:00
$this -> assertTrue ( isset ( $class -> associationMappings [ 'phonenumbers' ]));
2010-08-09 13:13:21 +02:00
$this -> assertFalse ( $class -> associationMappings [ 'phonenumbers' ][ 'isOwningSide' ]);
$this -> assertTrue ( $class -> associationMappings [ 'phonenumbers' ][ 'isCascadePersist' ]);
2011-09-06 01:58:16 -03:00
$this -> assertTrue ( $class -> associationMappings [ 'phonenumbers' ][ 'isCascadeRemove' ]);
2010-08-09 13:13:21 +02:00
$this -> assertFalse ( $class -> associationMappings [ 'phonenumbers' ][ 'isCascadeRefresh' ]);
$this -> assertFalse ( $class -> associationMappings [ 'phonenumbers' ][ 'isCascadeDetach' ]);
$this -> assertFalse ( $class -> associationMappings [ 'phonenumbers' ][ 'isCascadeMerge' ]);
2011-07-31 11:32:57 +02:00
$this -> assertTrue ( $class -> associationMappings [ 'phonenumbers' ][ 'orphanRemoval' ]);
2010-02-01 21:48:27 +00:00
2010-02-14 19:38:22 +00:00
// Test Order By
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'number' => 'ASC' ], $class -> associationMappings [ 'phonenumbers' ][ 'orderBy' ]);
2010-02-14 19:38:22 +00:00
2010-02-01 21:48:27 +00:00
return $class ;
}
/**
* @ depends testInverseOneToManyAssociation
* @ param ClassMetadata $class
*/
public function testManyToManyAssociationWithCascadeAll ( $class )
{
2009-06-05 21:40:47 +00:00
$this -> assertTrue ( isset ( $class -> associationMappings [ 'groups' ]));
2010-08-09 13:13:21 +02:00
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isOwningSide' ]);
2010-01-22 15:10:13 +00:00
// Make sure that cascade-all works as expected
2010-08-09 13:13:21 +02:00
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isCascadeRemove' ]);
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isCascadePersist' ]);
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isCascadeRefresh' ]);
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isCascadeDetach' ]);
$this -> assertTrue ( $class -> associationMappings [ 'groups' ][ 'isCascadeMerge' ]);
2010-01-27 23:00:55 +00:00
2010-08-09 13:13:21 +02:00
$this -> assertFalse ( isset ( $class -> associationMappings [ 'groups' ][ 'orderBy' ]));
2010-02-14 19:38:22 +00:00
2010-02-01 21:48:27 +00:00
return $class ;
}
/**
* @ depends testManyToManyAssociationWithCascadeAll
* @ param ClassMetadata $class
*/
public function testLifecycleCallbacks ( $class )
{
$this -> assertEquals ( count ( $class -> lifecycleCallbacks ), 2 );
$this -> assertEquals ( $class -> lifecycleCallbacks [ 'prePersist' ][ 0 ], 'doStuffOnPrePersist' );
$this -> assertEquals ( $class -> lifecycleCallbacks [ 'postPersist' ][ 0 ], 'doStuffOnPostPersist' );
return $class ;
}
/**
2010-03-15 19:29:07 +00:00
* @ depends testManyToManyAssociationWithCascadeAll
* @ param ClassMetadata $class
*/
2010-03-16 22:41:09 +00:00
public function testLifecycleCallbacksSupportMultipleMethodNames ( $class )
{
2010-03-15 19:29:07 +00:00
$this -> assertEquals ( count ( $class -> lifecycleCallbacks [ 'prePersist' ]), 2 );
$this -> assertEquals ( $class -> lifecycleCallbacks [ 'prePersist' ][ 1 ], 'doOtherStuffOnPrePersistToo' );
return $class ;
}
/**
* @ depends testLifecycleCallbacksSupportMultipleMethodNames
2010-02-01 21:48:27 +00:00
* @ param ClassMetadata $class
*/
public function testJoinColumnUniqueAndNullable ( $class )
{
2010-01-27 23:00:55 +00:00
// Non-Nullability of Join Column
2010-08-09 13:13:21 +02:00
$this -> assertFalse ( $class -> associationMappings [ 'groups' ][ 'joinTable' ][ 'joinColumns' ][ 0 ][ 'nullable' ]);
$this -> assertFalse ( $class -> associationMappings [ 'groups' ][ 'joinTable' ][ 'joinColumns' ][ 0 ][ 'unique' ]);
2010-02-01 21:48:27 +00:00
return $class ;
}
/**
* @ depends testJoinColumnUniqueAndNullable
* @ param ClassMetadata $class
*/
public function testColumnDefinition ( $class )
{
$this -> assertEquals ( " CHAR(32) NOT NULL " , $class -> fieldMappings [ 'email' ][ 'columnDefinition' ]);
2010-08-09 13:13:21 +02:00
$this -> assertEquals ( " INT NULL " , $class -> associationMappings [ 'groups' ][ 'joinTable' ][ 'inverseJoinColumns' ][ 0 ][ 'columnDefinition' ]);
2010-02-01 21:48:27 +00:00
return $class ;
2009-06-05 21:40:47 +00:00
}
2010-03-17 14:20:18 +00:00
/**
* @ depends testColumnDefinition
* @ param ClassMetadata $class
*/
2011-06-28 15:50:14 -04:00
public function testJoinColumnOnDelete ( $class )
2010-03-17 14:20:18 +00:00
{
2010-08-09 13:13:21 +02:00
$this -> assertEquals ( 'CASCADE' , $class -> associationMappings [ 'address' ][ 'joinColumns' ][ 0 ][ 'onDelete' ]);
2010-03-17 14:20:18 +00:00
return $class ;
}
2010-09-23 23:10:31 +02:00
/**
* @ group DDC - 514
*/
public function testDiscriminatorColumnDefaults ()
{
if ( strpos ( get_class ( $this ), 'PHPMappingDriver' ) !== false ) {
$this -> markTestSkipped ( 'PHP Mapping Drivers have no defaults.' );
}
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( Animal :: class );
2010-09-23 23:10:31 +02:00
$this -> assertEquals (
2016-12-07 23:33:41 +01:00
[ 'name' => 'discr' , 'type' => 'string' , 'length' => '32' , 'fieldName' => 'discr' , 'columnDefinition' => null ],
2010-09-23 23:10:31 +02:00
$class -> discriminatorColumn
);
}
2011-11-15 20:03:13 +01:00
2011-09-08 11:56:05 -03:00
/**
* @ group DDC - 869
*/
2011-09-08 12:55:55 -03:00
public function testMappedSuperclassWithRepository ()
2011-09-08 11:56:05 -03:00
{
$em = $this -> _getTestEntityManager ();
2012-03-25 13:34:52 -03:00
$factory = $this -> createClassMetadataFactory ( $em );
2011-11-15 20:03:13 +01:00
2016-12-08 18:01:04 +01:00
$class = $factory -> getMetadataFor ( DDC869CreditCardPayment :: class );
2011-11-15 20:03:13 +01:00
2011-09-08 11:56:05 -03:00
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'id' ]));
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'value' ]));
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'creditCardNumber' ]));
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( $class -> customRepositoryClassName , DDC869PaymentRepository :: class );
$this -> assertInstanceOf ( DDC869PaymentRepository :: class , $em -> getRepository ( DDC869CreditCardPayment :: class ));
$this -> assertTrue ( $em -> getRepository ( DDC869ChequePayment :: class ) -> isTrue ());
2011-11-15 20:03:13 +01:00
2016-12-08 18:01:04 +01:00
$class = $factory -> getMetadataFor ( DDC869ChequePayment :: class );
2011-11-15 20:03:13 +01:00
2011-09-08 11:56:05 -03:00
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'id' ]));
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'value' ]));
$this -> assertTrue ( isset ( $class -> fieldMappings [ 'serialNumber' ]));
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( $class -> customRepositoryClassName , DDC869PaymentRepository :: class );
$this -> assertInstanceOf ( DDC869PaymentRepository :: class , $em -> getRepository ( DDC869ChequePayment :: class ));
$this -> assertTrue ( $em -> getRepository ( DDC869ChequePayment :: class ) -> isTrue ());
2011-09-08 11:56:05 -03:00
}
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
/**
* @ group DDC - 1476
*/
public function testDefaultFieldType ()
{
2012-02-02 00:57:39 -02:00
$factory = $this -> createClassMetadataFactory ();
2016-12-08 18:01:04 +01:00
$class = $factory -> getMetadataFor ( DDC1476EntityWithDefaultFieldType :: class );
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertArrayHasKey ( 'id' , $class -> fieldMappings );
$this -> assertArrayHasKey ( 'name' , $class -> fieldMappings );
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertArrayHasKey ( 'type' , $class -> fieldMappings [ 'id' ]);
$this -> assertArrayHasKey ( 'type' , $class -> fieldMappings [ 'name' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertEquals ( 'string' , $class -> fieldMappings [ 'id' ][ 'type' ]);
$this -> assertEquals ( 'string' , $class -> fieldMappings [ 'name' ][ 'type' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertArrayHasKey ( 'fieldName' , $class -> fieldMappings [ 'id' ]);
$this -> assertArrayHasKey ( 'fieldName' , $class -> fieldMappings [ 'name' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertEquals ( 'id' , $class -> fieldMappings [ 'id' ][ 'fieldName' ]);
$this -> assertEquals ( 'name' , $class -> fieldMappings [ 'name' ][ 'fieldName' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertArrayHasKey ( 'columnName' , $class -> fieldMappings [ 'id' ]);
$this -> assertArrayHasKey ( 'columnName' , $class -> fieldMappings [ 'name' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertEquals ( 'id' , $class -> fieldMappings [ 'id' ][ 'columnName' ]);
$this -> assertEquals ( 'name' , $class -> fieldMappings [ 'name' ][ 'columnName' ]);
2011-11-15 20:03:13 +01:00
2011-11-14 13:15:43 -02:00
$this -> assertEquals ( ClassMetadataInfo :: GENERATOR_TYPE_NONE , $class -> generatorType );
}
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
/**
* @ group DDC - 1170
*/
public function testIdentifierColumnDefinition ()
{
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( DDC1170Entity :: class );
2011-12-05 17:35:49 -02:00
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
$this -> assertArrayHasKey ( 'id' , $class -> fieldMappings );
$this -> assertArrayHasKey ( 'value' , $class -> fieldMappings );
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
$this -> assertArrayHasKey ( 'columnDefinition' , $class -> fieldMappings [ 'id' ]);
$this -> assertArrayHasKey ( 'columnDefinition' , $class -> fieldMappings [ 'value' ]);
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
$this -> assertEquals ( " INT unsigned NOT NULL " , $class -> fieldMappings [ 'id' ][ 'columnDefinition' ]);
$this -> assertEquals ( " VARCHAR(255) NOT NULL " , $class -> fieldMappings [ 'value' ][ 'columnDefinition' ]);
}
2011-12-23 14:41:03 -02:00
/**
* @ group DDC - 559
*/
public function testNamingStrategy ()
{
$em = $this -> _getTestEntityManager ();
2012-03-25 13:34:52 -03:00
$factory = $this -> createClassMetadataFactory ( $em );
2011-12-23 14:41:03 -02:00
2016-12-08 18:01:04 +01:00
$this -> assertInstanceOf ( DefaultNamingStrategy :: class , $em -> getConfiguration () -> getNamingStrategy ());
2016-05-11 01:55:12 +07:00
$em -> getConfiguration () -> setNamingStrategy ( new UnderscoreNamingStrategy ( CASE_UPPER ));
2016-12-08 18:01:04 +01:00
$this -> assertInstanceOf ( UnderscoreNamingStrategy :: class , $em -> getConfiguration () -> getNamingStrategy ());
2011-12-23 14:41:03 -02:00
2016-12-08 18:01:04 +01:00
$class = $factory -> getMetadataFor ( DDC1476EntityWithDefaultFieldType :: class );
2011-12-23 14:41:03 -02:00
2015-11-06 15:23:16 +00:00
$this -> assertEquals ( 'ID' , $class -> getColumnName ( 'id' ));
$this -> assertEquals ( 'NAME' , $class -> getColumnName ( 'name' ));
2011-12-23 14:41:03 -02:00
$this -> assertEquals ( 'DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE' , $class -> table [ 'name' ]);
}
2012-02-13 23:22:49 -02:00
/**
* @ group DDC - 807
* @ group DDC - 553
*/
public function testDiscriminatorColumnDefinition ()
{
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( DDC807Entity :: class );
2012-02-13 23:22:49 -02:00
$this -> assertArrayHasKey ( 'columnDefinition' , $class -> discriminatorColumn );
$this -> assertArrayHasKey ( 'name' , $class -> discriminatorColumn );
$this -> assertEquals ( " ENUM('ONE','TWO') " , $class -> discriminatorColumn [ 'columnDefinition' ]);
$this -> assertEquals ( " dtype " , $class -> discriminatorColumn [ 'name' ]);
}
2012-03-25 12:54:09 -03:00
/**
* @ group DDC - 889
*/
2012-03-25 13:34:52 -03:00
public function testInvalidEntityOrMappedSuperClassShouldMentionParentClasses ()
{
2016-06-18 13:01:59 +02:00
$this -> expectException ( MappingException :: class );
$this -> expectExceptionMessage ( 'Class "Doctrine\Tests\Models\DDC889\DDC889Class" sub class of "Doctrine\Tests\Models\DDC889\DDC889SuperClass" is not a valid entity or mapped super class.' );
2013-01-20 20:31:22 +01:00
2016-12-08 18:01:04 +01:00
$this -> createClassMetadata ( DDC889Class :: class );
2012-03-25 13:34:52 -03:00
}
/**
* @ group DDC - 889
*/
public function testIdentifierRequiredShouldMentionParentClasses ()
2012-03-25 12:54:09 -03:00
{
2012-03-25 13:34:52 -03:00
$factory = $this -> createClassMetadataFactory ();
2013-01-20 20:31:22 +01:00
2016-06-18 13:01:59 +02:00
$this -> expectException ( MappingException :: class );
$this -> expectExceptionMessage ( 'No identifier/primary key specified for Entity "Doctrine\Tests\Models\DDC889\DDC889Entity" sub class of "Doctrine\Tests\Models\DDC889\DDC889SuperClass". Every Entity must have an identifier/primary key.' );
2016-12-08 18:01:04 +01:00
$factory -> getMetadataFor ( DDC889Entity :: class );
2012-03-25 12:54:09 -03:00
}
2012-02-26 21:10:19 -03:00
2012-06-18 23:41:20 +07:00
public function testNamedQuery ()
{
$driver = $this -> _loadDriver ();
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( User :: class );
2012-06-18 23:41:20 +07:00
$this -> assertCount ( 1 , $class -> getNamedQueries (), sprintf ( " Named queries not processed correctly by driver %s " , get_class ( $driver )));
}
2012-02-26 21:10:19 -03:00
/**
* @ group DDC - 1663
*/
public function testNamedNativeQuery ()
{
2013-01-20 20:31:22 +01:00
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( CmsAddress :: class );
2012-02-26 21:10:19 -03:00
2012-03-06 22:31:23 -03:00
//named native query
2012-02-26 21:10:19 -03:00
$this -> assertCount ( 3 , $class -> namedNativeQueries );
$this -> assertArrayHasKey ( 'find-all' , $class -> namedNativeQueries );
$this -> assertArrayHasKey ( 'find-by-id' , $class -> namedNativeQueries );
2012-03-06 22:31:23 -03:00
$findAllQuery = $class -> getNamedNativeQuery ( 'find-all' );
2012-02-26 21:10:19 -03:00
$this -> assertEquals ( 'find-all' , $findAllQuery [ 'name' ]);
$this -> assertEquals ( 'mapping-find-all' , $findAllQuery [ 'resultSetMapping' ]);
$this -> assertEquals ( 'SELECT id, country, city FROM cms_addresses' , $findAllQuery [ 'query' ]);
2012-03-06 22:31:23 -03:00
$findByIdQuery = $class -> getNamedNativeQuery ( 'find-by-id' );
2012-02-26 21:10:19 -03:00
$this -> assertEquals ( 'find-by-id' , $findByIdQuery [ 'name' ]);
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CmsAddress :: class , $findByIdQuery [ 'resultClass' ]);
2012-02-26 21:10:19 -03:00
$this -> assertEquals ( 'SELECT * FROM cms_addresses WHERE id = ?' , $findByIdQuery [ 'query' ]);
2012-03-06 22:31:23 -03:00
$countQuery = $class -> getNamedNativeQuery ( 'count' );
2012-02-26 21:10:19 -03:00
$this -> assertEquals ( 'count' , $countQuery [ 'name' ]);
$this -> assertEquals ( 'mapping-count' , $countQuery [ 'resultSetMapping' ]);
$this -> assertEquals ( 'SELECT COUNT(*) AS count FROM cms_addresses' , $countQuery [ 'query' ]);
2012-03-06 22:31:23 -03:00
// result set mapping
$this -> assertCount ( 3 , $class -> sqlResultSetMappings );
$this -> assertArrayHasKey ( 'mapping-count' , $class -> sqlResultSetMappings );
$this -> assertArrayHasKey ( 'mapping-find-all' , $class -> sqlResultSetMappings );
$this -> assertArrayHasKey ( 'mapping-without-fields' , $class -> sqlResultSetMappings );
2013-01-20 20:31:22 +01:00
2012-03-06 22:31:23 -03:00
$findAllMapping = $class -> getSqlResultSetMapping ( 'mapping-find-all' );
$this -> assertEquals ( 'mapping-find-all' , $findAllMapping [ 'name' ]);
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CmsAddress :: class , $findAllMapping [ 'entities' ][ 0 ][ 'entityClass' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'id' ], $findAllMapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'city' , 'column' => 'city' ], $findAllMapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'country' , 'column' => 'country' ], $findAllMapping [ 'entities' ][ 0 ][ 'fields' ][ 2 ]);
2012-03-06 22:31:23 -03:00
$withoutFieldsMapping = $class -> getSqlResultSetMapping ( 'mapping-without-fields' );
$this -> assertEquals ( 'mapping-without-fields' , $withoutFieldsMapping [ 'name' ]);
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CmsAddress :: class , $withoutFieldsMapping [ 'entities' ][ 0 ][ 'entityClass' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([], $withoutFieldsMapping [ 'entities' ][ 0 ][ 'fields' ]);
2013-01-20 20:31:22 +01:00
2012-03-06 22:31:23 -03:00
$countMapping = $class -> getSqlResultSetMapping ( 'mapping-count' );
$this -> assertEquals ( 'mapping-count' , $countMapping [ 'name' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'count' ], $countMapping [ 'columns' ][ 0 ]);
2012-03-06 22:31:23 -03:00
2012-02-26 21:10:19 -03:00
}
/**
* @ group DDC - 1663
*/
public function testSqlResultSetMapping ()
{
2016-12-08 18:01:04 +01:00
$userMetadata = $this -> createClassMetadata ( CmsUser :: class );
$personMetadata = $this -> createClassMetadata ( CompanyPerson :: class );
2012-03-06 22:31:23 -03:00
// user asserts
2012-03-11 12:10:15 -03:00
$this -> assertCount ( 4 , $userMetadata -> getSqlResultSetMappings ());
2012-03-06 22:31:23 -03:00
$mapping = $userMetadata -> getSqlResultSetMapping ( 'mappingJoinedAddress' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([], $mapping [ 'columns' ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( 'mappingJoinedAddress' , $mapping [ 'name' ]);
$this -> assertNull ( $mapping [ 'entities' ][ 0 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'name' , 'column' => 'name' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'status' , 'column' => 'status' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 2 ]);
$this -> assertEquals ([ 'name' => 'address.zip' , 'column' => 'zip' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 3 ]);
$this -> assertEquals ([ 'name' => 'address.city' , 'column' => 'city' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 4 ]);
$this -> assertEquals ([ 'name' => 'address.country' , 'column' => 'country' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 5 ]);
$this -> assertEquals ([ 'name' => 'address.id' , 'column' => 'a_id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 6 ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( $userMetadata -> name , $mapping [ 'entities' ][ 0 ][ 'entityClass' ]);
$mapping = $userMetadata -> getSqlResultSetMapping ( 'mappingJoinedPhonenumber' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([], $mapping [ 'columns' ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( 'mappingJoinedPhonenumber' , $mapping [ 'name' ]);
$this -> assertNull ( $mapping [ 'entities' ][ 0 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'name' , 'column' => 'name' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'status' , 'column' => 'status' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 2 ]);
$this -> assertEquals ([ 'name' => 'phonenumbers.phonenumber' , 'column' => 'number' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 3 ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( $userMetadata -> name , $mapping [ 'entities' ][ 0 ][ 'entityClass' ]);
$mapping = $userMetadata -> getSqlResultSetMapping ( 'mappingUserPhonenumberCount' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'numphones' ], $mapping [ 'columns' ][ 0 ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( 'mappingUserPhonenumberCount' , $mapping [ 'name' ]);
$this -> assertNull ( $mapping [ 'entities' ][ 0 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'name' , 'column' => 'name' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'status' , 'column' => 'status' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 2 ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( $userMetadata -> name , $mapping [ 'entities' ][ 0 ][ 'entityClass' ]);
2012-03-11 12:10:15 -03:00
$mapping = $userMetadata -> getSqlResultSetMapping ( 'mappingMultipleJoinsEntityResults' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'numphones' ], $mapping [ 'columns' ][ 0 ]);
2012-03-11 12:10:15 -03:00
$this -> assertEquals ( 'mappingMultipleJoinsEntityResults' , $mapping [ 'name' ]);
$this -> assertNull ( $mapping [ 'entities' ][ 0 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'u_id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'name' , 'column' => 'u_name' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'status' , 'column' => 'u_status' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 2 ]);
2012-03-11 12:10:15 -03:00
$this -> assertEquals ( $userMetadata -> name , $mapping [ 'entities' ][ 0 ][ 'entityClass' ]);
$this -> assertNull ( $mapping [ 'entities' ][ 1 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'a_id' ], $mapping [ 'entities' ][ 1 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'zip' , 'column' => 'a_zip' ], $mapping [ 'entities' ][ 1 ][ 'fields' ][ 1 ]);
$this -> assertEquals ([ 'name' => 'country' , 'column' => 'a_country' ], $mapping [ 'entities' ][ 1 ][ 'fields' ][ 2 ]);
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CmsAddress :: class , $mapping [ 'entities' ][ 1 ][ 'entityClass' ]);
2012-03-11 12:10:15 -03:00
2012-03-06 22:31:23 -03:00
//person asserts
$this -> assertCount ( 1 , $personMetadata -> getSqlResultSetMappings ());
$mapping = $personMetadata -> getSqlResultSetMapping ( 'mappingFetchAll' );
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([], $mapping [ 'columns' ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( 'mappingFetchAll' , $mapping [ 'name' ]);
$this -> assertEquals ( 'discriminator' , $mapping [ 'entities' ][ 0 ][ 'discriminatorColumn' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'name' => 'id' , 'column' => 'id' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 0 ]);
$this -> assertEquals ([ 'name' => 'name' , 'column' => 'name' ], $mapping [ 'entities' ][ 0 ][ 'fields' ][ 1 ]);
2012-03-06 22:31:23 -03:00
$this -> assertEquals ( $personMetadata -> name , $mapping [ 'entities' ][ 0 ][ 'entityClass' ]);
2012-02-26 21:10:19 -03:00
}
2012-02-02 00:57:39 -02:00
2015-11-05 12:11:29 +01:00
/*
2012-02-02 00:57:39 -02:00
* @ group DDC - 964
*/
public function testAssociationOverridesMapping ()
{
$factory = $this -> createClassMetadataFactory ();
2016-12-08 18:01:04 +01:00
$adminMetadata = $factory -> getMetadataFor ( DDC964Admin :: class );
$guestMetadata = $factory -> getMetadataFor ( DDC964Guest :: class );
2012-02-02 00:57:39 -02:00
2013-01-20 20:31:22 +01:00
2012-02-02 00:57:39 -02:00
// assert groups association mappings
$this -> assertArrayHasKey ( 'groups' , $guestMetadata -> associationMappings );
$this -> assertArrayHasKey ( 'groups' , $adminMetadata -> associationMappings );
$guestGroups = $guestMetadata -> associationMappings [ 'groups' ];
$adminGroups = $adminMetadata -> associationMappings [ 'groups' ];
// assert not override attributes
$this -> assertEquals ( $guestGroups [ 'fieldName' ], $adminGroups [ 'fieldName' ]);
$this -> assertEquals ( $guestGroups [ 'type' ], $adminGroups [ 'type' ]);
$this -> assertEquals ( $guestGroups [ 'mappedBy' ], $adminGroups [ 'mappedBy' ]);
$this -> assertEquals ( $guestGroups [ 'inversedBy' ], $adminGroups [ 'inversedBy' ]);
$this -> assertEquals ( $guestGroups [ 'isOwningSide' ], $adminGroups [ 'isOwningSide' ]);
$this -> assertEquals ( $guestGroups [ 'fetch' ], $adminGroups [ 'fetch' ]);
$this -> assertEquals ( $guestGroups [ 'isCascadeRemove' ], $adminGroups [ 'isCascadeRemove' ]);
$this -> assertEquals ( $guestGroups [ 'isCascadePersist' ], $adminGroups [ 'isCascadePersist' ]);
$this -> assertEquals ( $guestGroups [ 'isCascadeRefresh' ], $adminGroups [ 'isCascadeRefresh' ]);
$this -> assertEquals ( $guestGroups [ 'isCascadeMerge' ], $adminGroups [ 'isCascadeMerge' ]);
$this -> assertEquals ( $guestGroups [ 'isCascadeDetach' ], $adminGroups [ 'isCascadeDetach' ]);
// assert not override attributes
$this -> assertEquals ( 'ddc964_users_groups' , $guestGroups [ 'joinTable' ][ 'name' ]);
$this -> assertEquals ( 'user_id' , $guestGroups [ 'joinTable' ][ 'joinColumns' ][ 0 ][ 'name' ]);
$this -> assertEquals ( 'group_id' , $guestGroups [ 'joinTable' ][ 'inverseJoinColumns' ][ 0 ][ 'name' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'user_id' => 'id' ], $guestGroups [ 'relationToSourceKeyColumns' ]);
$this -> assertEquals ([ 'group_id' => 'id' ], $guestGroups [ 'relationToTargetKeyColumns' ]);
$this -> assertEquals ([ 'user_id' , 'group_id' ], $guestGroups [ 'joinTableColumns' ]);
2012-02-02 00:57:39 -02:00
$this -> assertEquals ( 'ddc964_users_admingroups' , $adminGroups [ 'joinTable' ][ 'name' ]);
$this -> assertEquals ( 'adminuser_id' , $adminGroups [ 'joinTable' ][ 'joinColumns' ][ 0 ][ 'name' ]);
$this -> assertEquals ( 'admingroup_id' , $adminGroups [ 'joinTable' ][ 'inverseJoinColumns' ][ 0 ][ 'name' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'adminuser_id' => 'id' ], $adminGroups [ 'relationToSourceKeyColumns' ]);
$this -> assertEquals ([ 'admingroup_id' => 'id' ], $adminGroups [ 'relationToTargetKeyColumns' ]);
$this -> assertEquals ([ 'adminuser_id' , 'admingroup_id' ], $adminGroups [ 'joinTableColumns' ]);
2012-02-02 00:57:39 -02:00
// assert address association mappings
$this -> assertArrayHasKey ( 'address' , $guestMetadata -> associationMappings );
$this -> assertArrayHasKey ( 'address' , $adminMetadata -> associationMappings );
$guestAddress = $guestMetadata -> associationMappings [ 'address' ];
$adminAddress = $adminMetadata -> associationMappings [ 'address' ];
// assert not override attributes
$this -> assertEquals ( $guestAddress [ 'fieldName' ], $adminAddress [ 'fieldName' ]);
$this -> assertEquals ( $guestAddress [ 'type' ], $adminAddress [ 'type' ]);
$this -> assertEquals ( $guestAddress [ 'mappedBy' ], $adminAddress [ 'mappedBy' ]);
$this -> assertEquals ( $guestAddress [ 'inversedBy' ], $adminAddress [ 'inversedBy' ]);
$this -> assertEquals ( $guestAddress [ 'isOwningSide' ], $adminAddress [ 'isOwningSide' ]);
$this -> assertEquals ( $guestAddress [ 'fetch' ], $adminAddress [ 'fetch' ]);
$this -> assertEquals ( $guestAddress [ 'isCascadeRemove' ], $adminAddress [ 'isCascadeRemove' ]);
$this -> assertEquals ( $guestAddress [ 'isCascadePersist' ], $adminAddress [ 'isCascadePersist' ]);
$this -> assertEquals ( $guestAddress [ 'isCascadeRefresh' ], $adminAddress [ 'isCascadeRefresh' ]);
$this -> assertEquals ( $guestAddress [ 'isCascadeMerge' ], $adminAddress [ 'isCascadeMerge' ]);
$this -> assertEquals ( $guestAddress [ 'isCascadeDetach' ], $adminAddress [ 'isCascadeDetach' ]);
2013-01-20 20:31:22 +01:00
2012-02-02 00:57:39 -02:00
// assert override
$this -> assertEquals ( 'address_id' , $guestAddress [ 'joinColumns' ][ 0 ][ 'name' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'address_id' => 'id' ], $guestAddress [ 'sourceToTargetKeyColumns' ]);
$this -> assertEquals ([ 'address_id' => 'address_id' ], $guestAddress [ 'joinColumnFieldNames' ]);
$this -> assertEquals ([ 'id' => 'address_id' ], $guestAddress [ 'targetToSourceKeyColumns' ]);
2012-02-02 00:57:39 -02:00
$this -> assertEquals ( 'adminaddress_id' , $adminAddress [ 'joinColumns' ][ 0 ][ 'name' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'adminaddress_id' => 'id' ], $adminAddress [ 'sourceToTargetKeyColumns' ]);
$this -> assertEquals ([ 'adminaddress_id' => 'adminaddress_id' ], $adminAddress [ 'joinColumnFieldNames' ]);
$this -> assertEquals ([ 'id' => 'adminaddress_id' ], $adminAddress [ 'targetToSourceKeyColumns' ]);
2012-02-02 00:57:39 -02:00
}
2012-04-14 02:10:44 -03:00
2015-11-05 12:11:29 +01:00
/*
* @ group DDC - 3579
*/
public function testInversedByOverrideMapping ()
{
$factory = $this -> createClassMetadataFactory ();
2016-12-08 18:01:04 +01:00
$adminMetadata = $factory -> getMetadataFor ( DDC3579Admin :: class );
2015-11-05 12:11:29 +01:00
// assert groups association mappings
$this -> assertArrayHasKey ( 'groups' , $adminMetadata -> associationMappings );
$adminGroups = $adminMetadata -> associationMappings [ 'groups' ];
// assert override
$this -> assertEquals ( 'admins' , $adminGroups [ 'inversedBy' ]);
}
2012-04-14 02:10:44 -03:00
/**
* @ group DDC - 964
*/
public function testAttributeOverridesMapping ()
{
$factory = $this -> createClassMetadataFactory ();
2016-12-08 18:01:04 +01:00
$guestMetadata = $factory -> getMetadataFor ( DDC964Guest :: class );
$adminMetadata = $factory -> getMetadataFor ( DDC964Admin :: class );
2012-04-14 02:10:44 -03:00
$this -> assertTrue ( $adminMetadata -> fieldMappings [ 'id' ][ 'id' ]);
$this -> assertEquals ( 'id' , $adminMetadata -> fieldMappings [ 'id' ][ 'fieldName' ]);
$this -> assertEquals ( 'user_id' , $adminMetadata -> fieldMappings [ 'id' ][ 'columnName' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'user_id' => 'id' , 'user_name' => 'name' ], $adminMetadata -> fieldNames );
$this -> assertEquals ([ 'id' => 'user_id' , 'name' => 'user_name' ], $adminMetadata -> columnNames );
2012-04-14 02:10:44 -03:00
$this -> assertEquals ( 150 , $adminMetadata -> fieldMappings [ 'id' ][ 'length' ]);
$this -> assertEquals ( 'name' , $adminMetadata -> fieldMappings [ 'name' ][ 'fieldName' ]);
$this -> assertEquals ( 'user_name' , $adminMetadata -> fieldMappings [ 'name' ][ 'columnName' ]);
$this -> assertEquals ( 250 , $adminMetadata -> fieldMappings [ 'name' ][ 'length' ]);
$this -> assertTrue ( $adminMetadata -> fieldMappings [ 'name' ][ 'nullable' ]);
$this -> assertFalse ( $adminMetadata -> fieldMappings [ 'name' ][ 'unique' ]);
$this -> assertTrue ( $guestMetadata -> fieldMappings [ 'id' ][ 'id' ]);
$this -> assertEquals ( 'guest_id' , $guestMetadata -> fieldMappings [ 'id' ][ 'columnName' ]);
$this -> assertEquals ( 'id' , $guestMetadata -> fieldMappings [ 'id' ][ 'fieldName' ]);
2016-12-07 23:33:41 +01:00
$this -> assertEquals ([ 'guest_id' => 'id' , 'guest_name' => 'name' ], $guestMetadata -> fieldNames );
$this -> assertEquals ([ 'id' => 'guest_id' , 'name' => 'guest_name' ], $guestMetadata -> columnNames );
2012-04-14 02:10:44 -03:00
$this -> assertEquals ( 140 , $guestMetadata -> fieldMappings [ 'id' ][ 'length' ]);
$this -> assertEquals ( 'name' , $guestMetadata -> fieldMappings [ 'name' ][ 'fieldName' ]);
$this -> assertEquals ( 'guest_name' , $guestMetadata -> fieldMappings [ 'name' ][ 'columnName' ]);
$this -> assertEquals ( 240 , $guestMetadata -> fieldMappings [ 'name' ][ 'length' ]);
$this -> assertFalse ( $guestMetadata -> fieldMappings [ 'name' ][ 'nullable' ]);
$this -> assertTrue ( $guestMetadata -> fieldMappings [ 'name' ][ 'unique' ]);
}
2012-07-29 21:46:38 -03:00
/**
* @ group DDC - 1955
*/
public function testEntityListeners ()
{
$em = $this -> _getTestEntityManager ();
$factory = $this -> createClassMetadataFactory ( $em );
2016-12-08 18:01:04 +01:00
$superClass = $factory -> getMetadataFor ( CompanyContract :: class );
$flexClass = $factory -> getMetadataFor ( CompanyFixContract :: class );
$fixClass = $factory -> getMetadataFor ( CompanyFlexContract :: class );
$ultraClass = $factory -> getMetadataFor ( CompanyFlexUltraContract :: class );
2012-07-29 21:46:38 -03:00
$this -> assertArrayHasKey ( Events :: prePersist , $superClass -> entityListeners );
$this -> assertArrayHasKey ( Events :: postPersist , $superClass -> entityListeners );
$this -> assertCount ( 1 , $superClass -> entityListeners [ Events :: prePersist ]);
$this -> assertCount ( 1 , $superClass -> entityListeners [ Events :: postPersist ]);
$postPersist = $superClass -> entityListeners [ Events :: postPersist ][ 0 ];
$prePersist = $superClass -> entityListeners [ Events :: prePersist ][ 0 ];
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CompanyContractListener :: class , $postPersist [ 'class' ]);
$this -> assertEquals ( CompanyContractListener :: class , $prePersist [ 'class' ]);
2012-07-29 21:46:38 -03:00
$this -> assertEquals ( 'postPersistHandler' , $postPersist [ 'method' ]);
$this -> assertEquals ( 'prePersistHandler' , $prePersist [ 'method' ]);
//Inherited listeners
$this -> assertEquals ( $fixClass -> entityListeners , $superClass -> entityListeners );
$this -> assertEquals ( $flexClass -> entityListeners , $superClass -> entityListeners );
2012-11-09 15:47:57 -02:00
}
/**
* @ group DDC - 1955
*/
public function testEntityListenersOverride ()
{
$em = $this -> _getTestEntityManager ();
$factory = $this -> createClassMetadataFactory ( $em );
2016-12-08 18:01:04 +01:00
$ultraClass = $factory -> getMetadataFor ( CompanyFlexUltraContract :: class );
2012-07-29 21:46:38 -03:00
2013-03-11 00:08:58 +00:00
//overridden listeners
2012-07-29 21:46:38 -03:00
$this -> assertArrayHasKey ( Events :: postPersist , $ultraClass -> entityListeners );
$this -> assertArrayHasKey ( Events :: prePersist , $ultraClass -> entityListeners );
$this -> assertCount ( 1 , $ultraClass -> entityListeners [ Events :: postPersist ]);
$this -> assertCount ( 3 , $ultraClass -> entityListeners [ Events :: prePersist ]);
$postPersist = $ultraClass -> entityListeners [ Events :: postPersist ][ 0 ];
$prePersist = $ultraClass -> entityListeners [ Events :: prePersist ][ 0 ];
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CompanyContractListener :: class , $postPersist [ 'class' ]);
$this -> assertEquals ( CompanyContractListener :: class , $prePersist [ 'class' ]);
2012-07-29 21:46:38 -03:00
$this -> assertEquals ( 'postPersistHandler' , $postPersist [ 'method' ]);
$this -> assertEquals ( 'prePersistHandler' , $prePersist [ 'method' ]);
$prePersist = $ultraClass -> entityListeners [ Events :: prePersist ][ 1 ];
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CompanyFlexUltraContractListener :: class , $prePersist [ 'class' ]);
2012-07-29 22:03:29 -03:00
$this -> assertEquals ( 'prePersistHandler1' , $prePersist [ 'method' ]);
2012-11-09 15:47:57 -02:00
2012-07-29 21:46:38 -03:00
$prePersist = $ultraClass -> entityListeners [ Events :: prePersist ][ 2 ];
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CompanyFlexUltraContractListener :: class , $prePersist [ 'class' ]);
2012-07-29 22:03:29 -03:00
$this -> assertEquals ( 'prePersistHandler2' , $prePersist [ 'method' ]);
2012-07-29 21:46:38 -03:00
}
2012-12-05 18:47:48 -02:00
/**
* @ group DDC - 1955
*/
public function testEntityListenersNamingConvention ()
{
$em = $this -> _getTestEntityManager ();
$factory = $this -> createClassMetadataFactory ( $em );
2016-12-08 18:01:04 +01:00
$metadata = $factory -> getMetadataFor ( CmsAddress :: class );
2012-12-05 18:47:48 -02:00
$this -> assertArrayHasKey ( Events :: postPersist , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: prePersist , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: postUpdate , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: preUpdate , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: postRemove , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: preRemove , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: postLoad , $metadata -> entityListeners );
$this -> assertArrayHasKey ( Events :: preFlush , $metadata -> entityListeners );
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: postPersist ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: prePersist ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: postUpdate ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: preUpdate ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: postRemove ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: preRemove ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: postLoad ]);
$this -> assertCount ( 1 , $metadata -> entityListeners [ Events :: preFlush ]);
$postPersist = $metadata -> entityListeners [ Events :: postPersist ][ 0 ];
$prePersist = $metadata -> entityListeners [ Events :: prePersist ][ 0 ];
$postUpdate = $metadata -> entityListeners [ Events :: postUpdate ][ 0 ];
$preUpdate = $metadata -> entityListeners [ Events :: preUpdate ][ 0 ];
$postRemove = $metadata -> entityListeners [ Events :: postRemove ][ 0 ];
$preRemove = $metadata -> entityListeners [ Events :: preRemove ][ 0 ];
$postLoad = $metadata -> entityListeners [ Events :: postLoad ][ 0 ];
$preFlush = $metadata -> entityListeners [ Events :: preFlush ][ 0 ];
2016-12-08 18:01:04 +01:00
$this -> assertEquals ( CmsAddressListener :: class , $postPersist [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $prePersist [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $postUpdate [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $preUpdate [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $postRemove [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $preRemove [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $postLoad [ 'class' ]);
$this -> assertEquals ( CmsAddressListener :: class , $preFlush [ 'class' ]);
2012-12-05 18:47:48 -02:00
$this -> assertEquals ( Events :: postPersist , $postPersist [ 'method' ]);
$this -> assertEquals ( Events :: prePersist , $prePersist [ 'method' ]);
$this -> assertEquals ( Events :: postUpdate , $postUpdate [ 'method' ]);
$this -> assertEquals ( Events :: preUpdate , $preUpdate [ 'method' ]);
$this -> assertEquals ( Events :: postRemove , $postRemove [ 'method' ]);
$this -> assertEquals ( Events :: preRemove , $preRemove [ 'method' ]);
$this -> assertEquals ( Events :: postLoad , $postLoad [ 'method' ]);
$this -> assertEquals ( Events :: preFlush , $preFlush [ 'method' ]);
}
2013-02-13 20:42:13 -02:00
/**
* @ group DDC - 2183
*/
public function testSecondLevelCacheMapping ()
{
$em = $this -> _getTestEntityManager ();
$factory = $this -> createClassMetadataFactory ( $em );
2016-12-08 18:01:04 +01:00
$class = $factory -> getMetadataFor ( City :: class );
2013-02-13 20:42:13 -02:00
$this -> assertArrayHasKey ( 'usage' , $class -> cache );
$this -> assertArrayHasKey ( 'region' , $class -> cache );
$this -> assertEquals ( ClassMetadata :: CACHE_USAGE_READ_ONLY , $class -> cache [ 'usage' ]);
$this -> assertEquals ( 'doctrine_tests_models_cache_city' , $class -> cache [ 'region' ]);
$this -> assertArrayHasKey ( 'state' , $class -> associationMappings );
$this -> assertArrayHasKey ( 'cache' , $class -> associationMappings [ 'state' ]);
$this -> assertArrayHasKey ( 'usage' , $class -> associationMappings [ 'state' ][ 'cache' ]);
$this -> assertArrayHasKey ( 'region' , $class -> associationMappings [ 'state' ][ 'cache' ]);
$this -> assertEquals ( ClassMetadata :: CACHE_USAGE_READ_ONLY , $class -> associationMappings [ 'state' ][ 'cache' ][ 'usage' ]);
$this -> assertEquals ( 'doctrine_tests_models_cache_city__state' , $class -> associationMappings [ 'state' ][ 'cache' ][ 'region' ]);
$this -> assertArrayHasKey ( 'attractions' , $class -> associationMappings );
$this -> assertArrayHasKey ( 'cache' , $class -> associationMappings [ 'attractions' ]);
$this -> assertArrayHasKey ( 'usage' , $class -> associationMappings [ 'attractions' ][ 'cache' ]);
$this -> assertArrayHasKey ( 'region' , $class -> associationMappings [ 'attractions' ][ 'cache' ]);
$this -> assertEquals ( ClassMetadata :: CACHE_USAGE_READ_ONLY , $class -> associationMappings [ 'attractions' ][ 'cache' ][ 'usage' ]);
$this -> assertEquals ( 'doctrine_tests_models_cache_city__attractions' , $class -> associationMappings [ 'attractions' ][ 'cache' ][ 'region' ]);
}
2015-01-14 16:59:01 +01:00
/**
* @ group DDC - 2825
* @ group 881
*/
public function testSchemaDefinitionViaExplicitTableSchemaAnnotationProperty ()
{
/* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
2016-12-08 18:01:04 +01:00
$metadata = $this -> createClassMetadataFactory () -> getMetadataFor ( ExplicitSchemaAndTable :: class );
2015-01-14 16:59:01 +01:00
2015-01-14 19:16:42 +01:00
$this -> assertSame ( 'explicit_schema' , $metadata -> getSchemaName ());
$this -> assertSame ( 'explicit_table' , $metadata -> getTableName ());
2015-01-14 16:59:01 +01:00
}
/**
* @ group DDC - 2825
* @ group 881
*/
public function testSchemaDefinitionViaSchemaDefinedInTableNameInTableAnnotationProperty ()
{
/* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
2016-12-08 18:01:04 +01:00
$metadata = $this -> createClassMetadataFactory () -> getMetadataFor ( SchemaAndTableInTableName :: class );
2015-01-14 16:59:01 +01:00
2015-01-14 19:16:42 +01:00
$this -> assertSame ( 'implicit_schema' , $metadata -> getSchemaName ());
$this -> assertSame ( 'implicit_table' , $metadata -> getTableName ());
2015-01-14 16:59:01 +01:00
}
2016-01-05 12:29:49 -05:00
/**
* @ group DDC - 514
* @ group DDC - 1015
*/
public function testDiscriminatorColumnDefaultLength ()
{
if ( strpos ( get_class ( $this ), 'PHPMappingDriver' ) !== false ) {
$this -> markTestSkipped ( 'PHP Mapping Drivers have no defaults.' );
}
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityNoDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 255 , $class -> discriminatorColumn [ 'length' ]);
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityIncompleteDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 255 , $class -> discriminatorColumn [ 'length' ]);
}
/**
* @ group DDC - 514
* @ group DDC - 1015
*/
public function testDiscriminatorColumnDefaultType ()
{
if ( strpos ( get_class ( $this ), 'PHPMappingDriver' ) !== false ) {
$this -> markTestSkipped ( 'PHP Mapping Drivers have no defaults.' );
}
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityNoDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 'string' , $class -> discriminatorColumn [ 'type' ]);
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityIncompleteDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 'string' , $class -> discriminatorColumn [ 'type' ]);
}
/**
* @ group DDC - 514
* @ group DDC - 1015
*/
public function testDiscriminatorColumnDefaultName ()
{
if ( strpos ( get_class ( $this ), 'PHPMappingDriver' ) !== false ) {
$this -> markTestSkipped ( 'PHP Mapping Drivers have no defaults.' );
}
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityNoDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 'dtype' , $class -> discriminatorColumn [ 'name' ]);
2016-12-08 18:01:04 +01:00
$class = $this -> createClassMetadata ( SingleTableEntityIncompleteDiscriminatorColumnMapping :: class );
2016-01-05 12:29:49 -05:00
$this -> assertEquals ( 'dtype' , $class -> discriminatorColumn [ 'name' ]);
}
2009-08-13 11:03:26 +00:00
}
2009-06-05 21:40:47 +00:00
2010-02-14 19:38:22 +00:00
/**
* @ Entity
* @ HasLifecycleCallbacks
2010-06-13 22:59:56 +02:00
* @ Table (
* name = " cms_users " ,
2014-07-21 17:42:49 +09:00
* uniqueConstraints = { @ UniqueConstraint ( name = " search_idx " , columns = { " name " , " user_email " }, options = { " where " : " name IS NOT NULL " })},
2012-01-26 14:36:56 +01:00
* indexes = { @ Index ( name = " name_idx " , columns = { " name " }), @ Index ( name = " 0 " , columns = { " user_email " })},
* options = { " foo " : " bar " , " baz " : { " key " : " val " }}
2010-06-13 22:59:56 +02:00
* )
2012-06-18 23:41:20 +07:00
* @ NamedQueries ({ @ NamedQuery ( name = " all " , query = " SELECT u FROM __CLASS__ u " )})
2010-02-14 19:38:22 +00:00
*/
class User
{
2010-05-01 03:28:18 +02:00
/**
* @ Id
2016-11-16 20:01:11 +01:00
* @ Column ( type = " integer " , options = { " foo " : " bar " , " unsigned " : false })
2010-05-01 03:28:18 +02:00
* @ generatedValue ( strategy = " AUTO " )
* @ SequenceGenerator ( sequenceName = " tablename_seq " , initialValue = 1 , allocationSize = 100 )
**/
2010-02-14 19:38:22 +00:00
public $id ;
/**
2016-11-16 20:01:11 +01:00
* @ Column ( length = 50 , nullable = true , unique = true , options = { " foo " : " bar " , " baz " : { " key " : " val " }, " fixed " : false })
2010-02-14 19:38:22 +00:00
*/
public $name ;
2010-02-01 21:48:27 +00:00
2010-02-14 19:38:22 +00:00
/**
* @ Column ( name = " user_email " , columnDefinition = " CHAR(32) NOT NULL " )
*/
public $email ;
2009-08-24 21:05:55 +00:00
2010-02-14 19:38:22 +00:00
/**
2010-04-10 00:00:36 +02:00
* @ OneToOne ( targetEntity = " Address " , cascade = { " remove " }, inversedBy = " user " )
2011-06-28 15:50:14 -04:00
* @ JoinColumn ( onDelete = " CASCADE " )
2010-02-14 19:38:22 +00:00
*/
public $address ;
/**
2011-07-31 11:32:57 +02:00
* @ OneToMany ( targetEntity = " Phonenumber " , mappedBy = " user " , cascade = { " persist " }, orphanRemoval = true )
2010-02-26 21:26:06 +00:00
* @ OrderBy ({ " number " = " ASC " })
2010-02-14 19:38:22 +00:00
*/
public $phonenumbers ;
/**
* @ ManyToMany ( targetEntity = " Group " , cascade = { " all " })
* @ JoinTable ( name = " cms_user_groups " ,
* joinColumns = { @ JoinColumn ( name = " user_id " , referencedColumnName = " id " , nullable = false , unique = false )},
* inverseJoinColumns = { @ JoinColumn ( name = " group_id " , referencedColumnName = " id " , columnDefinition = " INT NULL " )}
* )
*/
public $groups ;
2012-12-16 12:57:53 +01:00
/**
* @ Column ( type = " integer " )
* @ Version
*/
public $version ;
2010-03-15 19:29:07 +00:00
2010-02-14 19:38:22 +00:00
/**
* @ PrePersist
*/
2009-08-24 21:05:55 +00:00
public function doStuffOnPrePersist ()
{
}
2010-03-15 19:29:07 +00:00
/**
* @ PrePersist
*/
public function doOtherStuffOnPrePersistToo () {
}
2010-02-14 19:38:22 +00:00
/**
* @ PostPersist
*/
2009-08-24 21:05:55 +00:00
public function doStuffOnPostPersist ()
{
2010-02-01 21:48:27 +00:00
2009-08-24 21:05:55 +00:00
}
2010-04-23 16:16:16 -04:00
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
$metadata -> setInheritanceType ( ClassMetadataInfo :: INHERITANCE_TYPE_NONE );
2016-12-07 23:33:41 +01:00
$metadata -> setPrimaryTable (
[
2010-04-23 16:16:16 -04:00
'name' => 'cms_users' ,
2016-12-07 23:33:41 +01:00
'options' => [ 'foo' => 'bar' , 'baz' => [ 'key' => 'val' ]],
]
);
2010-04-23 16:16:16 -04:00
$metadata -> setChangeTrackingPolicy ( ClassMetadataInfo :: CHANGETRACKING_DEFERRED_IMPLICIT );
$metadata -> addLifecycleCallback ( 'doStuffOnPrePersist' , 'prePersist' );
$metadata -> addLifecycleCallback ( 'doOtherStuffOnPrePersistToo' , 'prePersist' );
$metadata -> addLifecycleCallback ( 'doStuffOnPostPersist' , 'postPersist' );
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2010-04-23 16:16:16 -04:00
'id' => true ,
'fieldName' => 'id' ,
'type' => 'integer' ,
'columnName' => 'id' ,
2016-12-07 23:33:41 +01:00
'options' => [ 'foo' => 'bar' , 'unsigned' => false ],
]
);
$metadata -> mapField (
[
2010-04-23 16:16:16 -04:00
'fieldName' => 'name' ,
'type' => 'string' ,
'length' => 50 ,
'unique' => true ,
'nullable' => true ,
'columnName' => 'name' ,
2016-12-07 23:33:41 +01:00
'options' => [ 'foo' => 'bar' , 'baz' => [ 'key' => 'val' ], 'fixed' => false ],
]
);
$metadata -> mapField (
[
2010-04-23 16:16:16 -04:00
'fieldName' => 'email' ,
'type' => 'string' ,
'columnName' => 'user_email' ,
'columnDefinition' => 'CHAR(32) NOT NULL' ,
2016-12-07 23:33:41 +01:00
]
);
$mapping = [ 'fieldName' => 'version' , 'type' => 'integer' ];
2012-12-16 12:57:53 +01:00
$metadata -> setVersionMapping ( $mapping );
$metadata -> mapField ( $mapping );
2010-04-23 16:16:16 -04:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_AUTO );
2016-12-07 23:33:41 +01:00
$metadata -> mapOneToOne (
[
2010-04-23 16:16:16 -04:00
'fieldName' => 'address' ,
2016-12-08 18:01:04 +01:00
'targetEntity' => Address :: class ,
2011-11-15 20:03:13 +01:00
'cascade' =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
0 => 'remove' ,
2016-12-07 23:33:41 +01:00
],
2010-04-23 16:16:16 -04:00
'mappedBy' => NULL ,
'inversedBy' => 'user' ,
2011-11-15 20:03:13 +01:00
'joinColumns' =>
2016-12-07 23:33:41 +01:00
[
2011-11-15 20:03:13 +01:00
0 =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
'name' => 'address_id' ,
'referencedColumnName' => 'id' ,
'onDelete' => 'CASCADE' ,
2016-12-07 23:33:41 +01:00
],
],
2010-04-23 16:16:16 -04:00
'orphanRemoval' => false ,
2016-12-07 23:33:41 +01:00
]
);
$metadata -> mapOneToMany (
[
2010-04-23 16:16:16 -04:00
'fieldName' => 'phonenumbers' ,
2016-12-08 18:01:04 +01:00
'targetEntity' => Phonenumber :: class ,
2011-11-15 20:03:13 +01:00
'cascade' =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
1 => 'persist' ,
2016-12-07 23:33:41 +01:00
],
2010-04-23 16:16:16 -04:00
'mappedBy' => 'user' ,
2011-07-31 11:32:57 +02:00
'orphanRemoval' => true ,
2011-11-15 20:03:13 +01:00
'orderBy' =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
'number' => 'ASC' ,
2016-12-07 23:33:41 +01:00
],
]
);
$metadata -> mapManyToMany (
[
2010-04-23 16:16:16 -04:00
'fieldName' => 'groups' ,
2016-12-08 18:01:04 +01:00
'targetEntity' => Group :: class ,
2011-11-15 20:03:13 +01:00
'cascade' =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
0 => 'remove' ,
1 => 'persist' ,
2 => 'refresh' ,
3 => 'merge' ,
4 => 'detach' ,
2016-12-07 23:33:41 +01:00
],
2010-04-23 16:16:16 -04:00
'mappedBy' => NULL ,
2011-11-15 20:03:13 +01:00
'joinTable' =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
'name' => 'cms_users_groups' ,
2011-11-15 20:03:13 +01:00
'joinColumns' =>
2016-12-07 23:33:41 +01:00
[
2011-11-15 20:03:13 +01:00
0 =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
'name' => 'user_id' ,
'referencedColumnName' => 'id' ,
'unique' => false ,
'nullable' => false ,
2016-12-07 23:33:41 +01:00
],
],
2011-11-15 20:03:13 +01:00
'inverseJoinColumns' =>
2016-12-07 23:33:41 +01:00
[
2011-11-15 20:03:13 +01:00
0 =>
2016-12-07 23:33:41 +01:00
[
2010-04-23 16:16:16 -04:00
'name' => 'group_id' ,
'referencedColumnName' => 'id' ,
'columnDefinition' => 'INT NULL' ,
2016-12-07 23:33:41 +01:00
],
],
],
2010-04-23 16:16:16 -04:00
'orderBy' => NULL ,
2016-12-07 23:33:41 +01:00
]
2010-04-28 20:27:53 +02:00
);
2016-12-07 23:33:41 +01:00
$metadata -> table [ 'uniqueConstraints' ] = [
'search_idx' => [ 'columns' => [ 'name' , 'user_email' ], 'options' => [ 'where' => 'name IS NOT NULL' ]],
];
$metadata -> table [ 'indexes' ] = [
'name_idx' => [ 'columns' => [ 'name' ]], 0 => [ 'columns' => [ 'user_email' ]]
];
$metadata -> setSequenceGeneratorDefinition (
[
2010-05-01 03:28:18 +02:00
'sequenceName' => 'tablename_seq' ,
'allocationSize' => 100 ,
'initialValue' => 1 ,
2016-12-07 23:33:41 +01:00
]
);
$metadata -> addNamedQuery (
[
2012-06-18 23:41:20 +07:00
'name' => 'all' ,
'query' => 'SELECT u FROM __CLASS__ u'
2016-12-07 23:33:41 +01:00
]
);
2010-04-23 16:16:16 -04:00
}
2010-09-21 23:14:45 +02:00
}
2010-09-23 23:10:31 +02:00
/**
* @ Entity
* @ InheritanceType ( " SINGLE_TABLE " )
* @ DiscriminatorMap ({ " cat " = " Cat " , " dog " = " Dog " })
2012-07-08 09:06:52 +02:00
* @ DiscriminatorColumn ( name = " discr " , length = 32 , type = " string " )
2010-09-23 23:10:31 +02:00
*/
abstract class Animal
{
/**
2011-11-28 21:54:54 +03:00
* @ Id @ Column ( type = " string " ) @ GeneratedValue ( strategy = " CUSTOM " )
2012-01-08 15:20:35 +03:00
* @ CustomIdGenerator ( class = " stdClass " )
2010-09-23 23:10:31 +02:00
*/
public $id ;
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2011-11-28 23:21:46 +03:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_CUSTOM );
2016-12-07 23:33:41 +01:00
$metadata -> setCustomGeneratorDefinition ([ " class " => " stdClass " ]);
2010-09-23 23:10:31 +02:00
}
}
/** @Entity */
class Cat extends Animal
{
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2011-11-15 20:03:13 +01:00
2010-09-23 23:10:31 +02:00
}
}
/** @Entity */
class Dog extends Animal
{
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2011-11-15 20:03:13 +01:00
2010-09-23 23:10:31 +02:00
}
2011-12-05 17:35:49 -02:00
}
/**
* @ Entity
*/
class DDC1170Entity
{
/**
2011-12-19 22:56:19 +01:00
* @ param string $value
2011-12-05 17:35:49 -02:00
*/
function __construct ( $value = null )
{
$this -> value = $value ;
}
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
/**
* @ Id
* @ GeneratedValue ( strategy = " NONE " )
* @ Column ( type = " integer " , columnDefinition = " INT unsigned NOT NULL " )
**/
private $id ;
/**
* @ Column ( columnDefinition = " VARCHAR(255) NOT NULL " )
*/
private $value ;
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
/**
2015-07-14 15:30:13 -03:00
* @ return int
2011-12-05 17:35:49 -02:00
*/
public function getId ()
{
return $this -> id ;
}
/**
* @ return string
*/
public function getValue ()
{
return $this -> value ;
}
2011-12-19 22:56:19 +01:00
2011-12-05 17:35:49 -02:00
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2011-12-05 17:35:49 -02:00
'id' => true ,
'fieldName' => 'id' ,
'columnDefinition' => 'INT unsigned NOT NULL' ,
2016-12-07 23:33:41 +01:00
]
);
2011-12-05 17:35:49 -02:00
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2011-12-05 17:35:49 -02:00
'fieldName' => 'value' ,
'columnDefinition' => 'VARCHAR(255) NOT NULL'
2016-12-07 23:33:41 +01:00
]
);
2011-12-05 17:35:49 -02:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_NONE );
}
2011-10-15 17:38:55 +02:00
}
2012-02-13 23:22:49 -02:00
/**
* @ Entity
* @ InheritanceType ( " SINGLE_TABLE " )
* @ DiscriminatorMap ({ " ONE " = " DDC807SubClasse1 " , " TWO " = " DDC807SubClasse2 " })
* @ DiscriminatorColumn ( name = " dtype " , columnDefinition = " ENUM('ONE','TWO') " )
*/
class DDC807Entity
{
/**
* @ Id
* @ Column ( type = " integer " )
* @ GeneratedValue ( strategy = " NONE " )
**/
public $id ;
2013-01-20 20:31:22 +01:00
2012-02-13 23:22:49 -02:00
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2012-02-13 23:22:49 -02:00
'id' => true ,
'fieldName' => 'id' ,
2016-12-07 23:33:41 +01:00
]
);
2012-02-13 23:22:49 -02:00
2016-12-07 23:33:41 +01:00
$metadata -> setDiscriminatorColumn (
[
2012-02-13 23:22:49 -02:00
'name' => " dtype " ,
'type' => " string " ,
'columnDefinition' => " ENUM('ONE','TWO') "
2016-12-07 23:33:41 +01:00
]
);
2012-02-13 23:22:49 -02:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_NONE );
}
}
class DDC807SubClasse1 {}
class DDC807SubClasse2 {}
2011-10-15 17:38:55 +02:00
class Address {}
class Phonenumber {}
2011-12-21 23:56:25 +01:00
class Group {}
2014-03-08 00:22:35 +01:00
/**
* @ Entity
2014-07-21 17:42:49 +09:00
* @ Table ( indexes = { @ Index ( columns = { " content " }, flags = { " fulltext " }, options = { " where " : " content IS NOT NULL " })})
2014-03-08 00:22:35 +01:00
*/
class Comment
{
/**
* @ Column ( type = " text " )
*/
private $content ;
2014-03-08 00:52:31 +01:00
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
$metadata -> setInheritanceType ( ClassMetadataInfo :: INHERITANCE_TYPE_NONE );
2016-12-07 23:33:41 +01:00
$metadata -> setPrimaryTable (
[
'indexes' => [
[ 'columns' => [ 'content' ], 'flags' => [ 'fulltext' ], 'options' => [ 'where' => 'content IS NOT NULL' ]]
]
]
);
2014-03-08 00:52:31 +01:00
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2014-03-08 00:52:31 +01:00
'fieldName' => 'content' ,
'type' => 'text' ,
'scale' => 0 ,
'length' => NULL ,
'unique' => false ,
'nullable' => false ,
'precision' => 0 ,
'columnName' => 'content' ,
2016-12-07 23:33:41 +01:00
]
);
2014-03-08 00:52:31 +01:00
}
2015-11-05 12:11:29 +01:00
}
2016-01-05 12:29:49 -05:00
/**
* @ Entity
* @ InheritanceType ( " SINGLE_TABLE " )
* @ DiscriminatorMap ({
* " ONE " = " SingleTableEntityNoDiscriminatorColumnMappingSub1 " ,
* " TWO " = " SingleTableEntityNoDiscriminatorColumnMappingSub2 "
* })
*/
class SingleTableEntityNoDiscriminatorColumnMapping
{
/**
* @ Id
* @ Column ( type = " integer " )
* @ GeneratedValue ( strategy = " NONE " )
*/
public $id ;
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2016-01-05 12:29:49 -05:00
'id' => true ,
'fieldName' => 'id' ,
2016-12-07 23:33:41 +01:00
]
);
2016-01-05 12:29:49 -05:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_NONE );
}
}
class SingleTableEntityNoDiscriminatorColumnMappingSub1 extends SingleTableEntityNoDiscriminatorColumnMapping {}
class SingleTableEntityNoDiscriminatorColumnMappingSub2 extends SingleTableEntityNoDiscriminatorColumnMapping {}
/**
* @ Entity
* @ InheritanceType ( " SINGLE_TABLE " )
* @ DiscriminatorMap ({
* " ONE " = " SingleTableEntityIncompleteDiscriminatorColumnMappingSub1 " ,
* " TWO " = " SingleTableEntityIncompleteDiscriminatorColumnMappingSub2 "
* })
* @ DiscriminatorColumn ( name = " dtype " )
*/
class SingleTableEntityIncompleteDiscriminatorColumnMapping
{
/**
* @ Id
* @ Column ( type = " integer " )
* @ GeneratedValue ( strategy = " NONE " )
*/
public $id ;
public static function loadMetadata ( ClassMetadataInfo $metadata )
{
2016-12-07 23:33:41 +01:00
$metadata -> mapField (
[
2016-01-05 12:29:49 -05:00
'id' => true ,
'fieldName' => 'id' ,
2016-12-07 23:33:41 +01:00
]
);
2016-01-05 12:29:49 -05:00
$metadata -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_NONE );
}
}
class SingleTableEntityIncompleteDiscriminatorColumnMappingSub1
extends SingleTableEntityIncompleteDiscriminatorColumnMapping {}
class SingleTableEntityIncompleteDiscriminatorColumnMappingSub2
2016-11-16 20:01:11 +01:00
extends SingleTableEntityIncompleteDiscriminatorColumnMapping {}