Throw exception on invalid fetch mode in annotations
This commit is contained in:
parent
d532de9da3
commit
e99b800406
@ -331,7 +331,7 @@ class AnnotationDriver implements Driver
|
|||||||
$mapping['inversedBy'] = $oneToOneAnnot->inversedBy;
|
$mapping['inversedBy'] = $oneToOneAnnot->inversedBy;
|
||||||
$mapping['cascade'] = $oneToOneAnnot->cascade;
|
$mapping['cascade'] = $oneToOneAnnot->cascade;
|
||||||
$mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval;
|
$mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval;
|
||||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $oneToOneAnnot->fetch);
|
$mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch);
|
||||||
$metadata->mapOneToOne($mapping);
|
$metadata->mapOneToOne($mapping);
|
||||||
} else if ($oneToManyAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OneToMany')) {
|
} else if ($oneToManyAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OneToMany')) {
|
||||||
$mapping['mappedBy'] = $oneToManyAnnot->mappedBy;
|
$mapping['mappedBy'] = $oneToManyAnnot->mappedBy;
|
||||||
@ -339,7 +339,7 @@ class AnnotationDriver implements Driver
|
|||||||
$mapping['cascade'] = $oneToManyAnnot->cascade;
|
$mapping['cascade'] = $oneToManyAnnot->cascade;
|
||||||
$mapping['indexBy'] = $oneToManyAnnot->indexBy;
|
$mapping['indexBy'] = $oneToManyAnnot->indexBy;
|
||||||
$mapping['orphanRemoval'] = $oneToManyAnnot->orphanRemoval;
|
$mapping['orphanRemoval'] = $oneToManyAnnot->orphanRemoval;
|
||||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $oneToManyAnnot->fetch);
|
$mapping['fetch'] = $this->getFetchMode($className, $oneToManyAnnot->fetch);
|
||||||
|
|
||||||
if ($orderByAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OrderBy')) {
|
if ($orderByAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OrderBy')) {
|
||||||
$mapping['orderBy'] = $orderByAnnot->value;
|
$mapping['orderBy'] = $orderByAnnot->value;
|
||||||
@ -355,7 +355,7 @@ class AnnotationDriver implements Driver
|
|||||||
$mapping['cascade'] = $manyToOneAnnot->cascade;
|
$mapping['cascade'] = $manyToOneAnnot->cascade;
|
||||||
$mapping['inversedBy'] = $manyToOneAnnot->inversedBy;
|
$mapping['inversedBy'] = $manyToOneAnnot->inversedBy;
|
||||||
$mapping['targetEntity'] = $manyToOneAnnot->targetEntity;
|
$mapping['targetEntity'] = $manyToOneAnnot->targetEntity;
|
||||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $manyToOneAnnot->fetch);
|
$mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch);
|
||||||
$metadata->mapManyToOne($mapping);
|
$metadata->mapManyToOne($mapping);
|
||||||
} else if ($manyToManyAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\ManyToMany')) {
|
} else if ($manyToManyAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\ManyToMany')) {
|
||||||
$joinTable = array();
|
$joinTable = array();
|
||||||
@ -395,7 +395,7 @@ class AnnotationDriver implements Driver
|
|||||||
$mapping['inversedBy'] = $manyToManyAnnot->inversedBy;
|
$mapping['inversedBy'] = $manyToManyAnnot->inversedBy;
|
||||||
$mapping['cascade'] = $manyToManyAnnot->cascade;
|
$mapping['cascade'] = $manyToManyAnnot->cascade;
|
||||||
$mapping['indexBy'] = $manyToManyAnnot->indexBy;
|
$mapping['indexBy'] = $manyToManyAnnot->indexBy;
|
||||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $manyToManyAnnot->fetch);
|
$mapping['fetch'] = $this->getFetchMode($className, $manyToManyAnnot->fetch);
|
||||||
|
|
||||||
if ($orderByAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OrderBy')) {
|
if ($orderByAnnot = $this->_reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\OrderBy')) {
|
||||||
$mapping['orderBy'] = $orderByAnnot->value;
|
$mapping['orderBy'] = $orderByAnnot->value;
|
||||||
@ -536,6 +536,22 @@ class AnnotationDriver implements Driver
|
|||||||
return $classes;
|
return $classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to resolve the fetch mode.
|
||||||
|
*
|
||||||
|
* @param string $className The class name
|
||||||
|
* @param string $fetchMode The fetch mode
|
||||||
|
* @return integer The fetch mode as defined in ClassMetadata
|
||||||
|
* @throws MappingException If the fetch mode is not valid
|
||||||
|
*/
|
||||||
|
private function getFetchMode($className, $fetchMode)
|
||||||
|
{
|
||||||
|
if(!defined('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode)) {
|
||||||
|
throw MappingException::invalidFetchMode($className, $fetchMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Factory method for the Annotation Driver
|
* Factory method for the Annotation Driver
|
||||||
*
|
*
|
||||||
|
@ -298,4 +298,9 @@ class MappingException extends \Doctrine\ORM\ORMException
|
|||||||
{
|
{
|
||||||
return new self("Entity '" . $className . "' has no method '" . $methodName . "' to be registered as lifecycle callback.");
|
return new self("Entity '" . $className . "' has no method '" . $methodName . "' to be registered as lifecycle callback.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function invalidFetchMode($className, $annotation)
|
||||||
|
{
|
||||||
|
return new self("Entity '" . $className . "' has a mapping with invalid fetch mode '" . $annotation . "'");
|
||||||
|
}
|
||||||
}
|
}
|
@ -199,6 +199,20 @@ class AnnotationDriverTest extends AbstractMappingDriverTest
|
|||||||
|
|
||||||
$cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\ChildEntity');
|
$cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\ChildEntity');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testInvalidFetchOptionThrowsException()
|
||||||
|
{
|
||||||
|
$annotationDriver = $this->_loadDriver();
|
||||||
|
|
||||||
|
$em = $this->_getTestEntityManager();
|
||||||
|
$em->getConfiguration()->setMetadataDriverImpl($annotationDriver);
|
||||||
|
$factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory();
|
||||||
|
$factory->setEntityManager($em);
|
||||||
|
|
||||||
|
$this->setExpectedException('Doctrine\ORM\Mapping\MappingException',
|
||||||
|
"Entity 'Doctrine\Tests\ORM\Mapping\InvalidFetchOption' has a mapping with invalid fetch mode 'eager");
|
||||||
|
$cm = $factory->getMetadataFor('Doctrine\Tests\ORM\Mapping\InvalidFetchOption');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -311,3 +325,14 @@ class ChildEntity extends MiddleMappedSuperclass
|
|||||||
*/
|
*/
|
||||||
private $text;
|
private $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class InvalidFetchOption
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @OneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", fetch="eager")
|
||||||
|
*/
|
||||||
|
private $collection;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user