我的DAO类怎么能看到我的学说模型


How can my DAO class see my doctrine model?

我已经决定将所有DAO操作从我的控制器类移动到DAO类(刚刚在java上习惯了)。

无论如何,当我试图运行我的DQL,学说是抱怨它不能看到我的模型/实体。但我认为在DAO类的顶部声明它可以防止这种情况。显然不是。

你能帮帮我吗?由于

my DAO class

<?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}
   $queryBuilder
                ->select('directory')
                ->from('DirectoryModel', 'directory');

我很确定你需要键入整个类名与命名空间

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

当然前提是模型是由ORM管理的