. */ /** * JoinSingleValuedAssociationPathExpression ::= IdentificationVariable "." SingleValuedAssociationField * * @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_JoinSingleValuedAssociationPathExpression extends Doctrine_ORM_Query_ParserRule { protected $_AST = null; public function syntax() { // JoinSingleValuedAssociationPathExpression ::= IdentificationVariable "." SingleValuedAssociationField $this->_AST = $this->AST('JoinSingleValuedAssociationPathExpression'); $this->_AST->setIdentificationVariable($this->parse('IdentificationVariable')); $this->_parser->match(Doctrine_ORM_Query_Token::T_DOT); $this->_AST->setSingleValuedAssociationField($this->parse('SingleValuedAssociationField')); } public function semantical() { $parserResult = $this->_parser->getParserResult(); $queryComponent = $parserResult->getQueryComponent($this->_AST->setIdentificationVariable()); $fieldName = $this->_AST->setSingleValuedAssociationField(); 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 single valued association in component '" . $componentName . "'."; $this->_parser->semanticalError($message); } return $this->_AST; } }