0

我决定将任何 DAO 操作从我的控制器类移动到 DAO 类(只是在 java 上习惯了它)。

无论如何,当我尝试运行我的 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}
4

1 回答 1

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

我很确定您需要使用命名空间键入整个类名

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

当然,前提是模型由 ORM 管理。

于 2013-05-06T09:42:10.550 回答