我已经决定将所有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管理的