. */ /** * JoinCollectionValuedPathExpression ::= IdentificationVariable "." CollectionValuedAssociationField * * @author Guilherme Blanco * @author Janne Vanhala * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link http://www.phpdoctrine.org * @since 2.0 * @version $Revision$ */ class Doctrine_ORM_Query_Parser_JoinCollectionValuedPathExpression extends Doctrine_ORM_Query_ParserRule { protected $_AST = null; public function syntax() { // JoinCollectionValuedPathExpression ::= IdentificationVariable "." CollectionValuedAssociationField $this->_AST = $this->AST('JoinCollectionValuedPathExpression'); $this->_AST->setIdentificationVariable($this->parse('IdentificationVariable')); $this->_parser->match(Doctrine_ORM_Query_Token::T_DOT); $this->_AST->setCollectionValuedAssociationField($this->parse('CollectionValuedAssociationField')); } public function semantical() { $parserResult = $this->_parser->getParserResult(); $queryComponent = $parserResult->getQueryComponent($this->_AST->setIdentificationVariable()); $fieldName = $this->_AST->setCollectionValuedAssociationField(); if ( ! $queryComponent['metadata']->hasField($fieldName)) { $componentName = $queryComponent['metadata']->getClassName(); $message = "Field '" . $fieldName . "' does not exist in component '" . $componentName . "'."; $this->_parser->semanticalError($message); } if ( ! ($queryComponent['metadata']->hasAssociation($fieldName) && $queryComponent['metadata']->getAssociation($fieldName)->isOneToTone())) { $componentName = $queryComponent['metadata']->getClassName(); $message = "Field '" . $fieldName . "' does not map to a collection valued association in component '" . $componentName . "'."; $this->_parser->semanticalError($message); } return $this->_AST; } }