2013-05-06 2 views
0

Я решил перенести любые операции DAO с моего класса контроллера на класс DAO (он просто использовался для него на java).Как мой класс DAO может увидеть мою модель доктрины?

Во всяком случае, когда я пытаюсь запустить свой DQL, доктрина жалуется, что не может видеть мою модель/сущность. Но я думал, что объявить его в верхней части моего класса DAO будет помешать этому. Очевидно, это не так.

Не могли бы вы помочь? благодаря

мой DAO класс

<?php 

namespace Directory\Dao; 

use Directory\Model\DirectoryModel; 

use Doctrine\ORM\QueryBuilder, 
    Doctrine\ORM\Query\Expr\Andx; 

class DirectoryDao { 
    /** 
    * @var Doctrine\ORM\EntityManager 
    */ 
    protected $entityManager; 

    public function setEntityManager(EntityManager $entityManager) { 
     $this->entityManager = $entityManager; 
    } 
    public function getEntityManager() { 
     if (null === $this->entityManager) { 
      $this->entityManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); 
     } 
     return $this->entityManager; 
    } 

    public function searchStaffDirectory(QueryBuilder $queryBuilder, DirectoryModel $directory) { 
     //$queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
     $conditions = new Andx; 

     $queryBuilder 
       ->select('directory') 
       ->from('DirectoryModel', 'directory'); 
     if (strlen($directory->surnameSearch)) { 
      $conditions->add($queryBuilder->expr()->like('directory.surnameSearch', $directory->surnameSearch)); 
     } 
     if (strlen($directory->surnameSoundsSearch)) { 
      $conditions->add($queryBuilder->expr()->like('directory.surnameSoundsSearch', $directory->surnameSoundsSearch)); 
     } 
     if (strlen($directory->firstnameSearch)) { 
      $conditions->add($queryBuilder->expr()->like('directory.firsnameSearch', $directory->firstnameSearch)); 
     } 
     if (strlen($directory->telephoneNumber)) { 
      $conditions->add($queryBuilder->expr()->like('directory.telephoneNumber', $directory->telephoneNumber)); 
     } 
     if (strlen($directory->departmentSearch)) { 
      $conditions->add($queryBuilder->expr()->like('directory.departmentSearch', $directory->departmentSearch)); 
     } 
     if (strlen($directory->roleSearch)) { 
      $conditions->add($queryBuilder->expr()->like('directory.roleSearch', $directory->roleSearch)); 
     } 
     if ($conditions->count()) { 
       $queryBuilder->andWhere($conditions); 
     } 
     $queryBuilder 
       ->orderBy('UPPER(directory.surname)') 
       ->addOrderBy('UPPER(directory.firstname)'); 

     $query = $queryBuilder->getQuery(); 
     $result = $query->getResult(); 


     var_dump($queryBuilder->getDql()); 
    } 
} 

сообщение об ошибке с трассировки стека:

File: 

    D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php:49 

Message: 

    [Semantical Error] line 0, col 22 near 'DirectoryModel': Error: Class 'DirectoryModel' is not defined. 

Stack trace: 

#0 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(429): Doctrine\ORM\Query\QueryException::semanticalError('line 0, col 22 ...', Object(Doctrine\ORM\Query\QueryException)) 
#1 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(854): Doctrine\ORM\Query\Parser->semanticalError('Class 'Director...', Array) 
#2 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(1529): Doctrine\ORM\Query\Parser->AbstractSchemaName() 
#3 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(1426): Doctrine\ORM\Query\Parser->RangeVariableDeclaration() 
#4 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(1168): Doctrine\ORM\Query\Parser->IdentificationVariableDeclaration() 
#5 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(757): Doctrine\ORM\Query\Parser->FromClause() 
#6 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(726): Doctrine\ORM\Query\Parser->SelectStatement() 
#7 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(229): Doctrine\ORM\Query\Parser->QueryLanguage() 
#8 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Parser.php(304): Doctrine\ORM\Query\Parser->getAST() 
#9 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query.php(233): Doctrine\ORM\Query\Parser->parse() 
#10 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\Query.php(245): Doctrine\ORM\Query->_parse() 
#11 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\AbstractQuery.php(737): Doctrine\ORM\Query->_doExecute() 
#12 D:\work\eclipse\htdocs\directory\vendor\doctrine\orm\lib\Doctrine\ORM\AbstractQuery.php(538): Doctrine\ORM\AbstractQuery->execute(NULL, 1) 
#13 D:\work\eclipse\htdocs\directory\module\Directory\src\Directory\Dao\DirectoryDao.php(59): Doctrine\ORM\AbstractQuery->getResult() 
#14 D:\work\eclipse\htdocs\directory\module\Directory\src\Directory\Controller\DirectoryController.php(57): Directory\Dao\DirectoryDao->searchStaffDirectory(Object(Doctrine\ORM\QueryBuilder), Object(Directory\Model\DirectoryModel)) 
#15 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(83): Directory\Controller\DirectoryController->searchAction() 
#16 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) 
#17 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(460): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) 
#18 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(204): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#19 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#20 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\Mvc\DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) 
#21 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) 
#22 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(460): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) 
#23 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(204): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#24 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(294): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#25 D:\work\eclipse\htdocs\directory\public\index.php(12): Zend\Mvc\Application->run() 
#26 {main} 

ответ

0
$queryBuilder 
       ->select('directory') 
       ->from('DirectoryModel', 'directory'); 

я уверен, что вам нужно ввести все имя класса с пространством имен

$queryBuilder 
       ->select('directory') 
       ->from('Directory\Model\DirectoryModel', 'directory'); 

при условии, что модель управляется ORM, конечно.

Смежные вопросы