我试图找到我数据库中的所有用户,并且当我试图获取存储库时,由于无法找到要查找的内容,所以理论映射失败。
我的代码中有一个名称空间。
composer.json
"autoload" : {
"psr-4" : {
"Olive\\Todo\\" : "src/",
"Olive\\Todo\\Exceptions\\" : "exceptions/",
"Olive\\Todo\\Tests\\" : "tests/"
}
}
当我尝试获取存储库以查找所有用户时,它会失败。
索引
/**
* Get Users array
*
* @param EntityManager $entityManager
*
* @return array
**/
function findUser( $entityManager )
{
$ret = [];
$userRepository = $entityManager->getRepository('User');
return $ret;
}
这是我在尝试执行此代码时遇到的错误。
致命错误:未捕获 原则\公共\持久性\映射\映射异常:类'用户' 在中不存在 /srv/www/simple-project/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:93 堆栈跟踪:
这是存储库本身。
UserRepository.php
<?php
namespace Olive\Todo\User;
use Doctrine\ORM\EntityRepository;
use Olive\Todo\User\User;
/**
* @author Ismael Moral <jastertdc@gmail.com>
**/
class UserRepository extends EntityRepository
{
/**
* Get all users
*
* @return array
**/
public function getUser( $maxResults = 50 )
{
$dql = "SELECT u FROM user u";
$query = $this->getEntityManager()->createQuery( $dql );
$query->setMaxResults( $maxResults );
return $query->getResult();
}
}
我认为我需要在原则中设置一些配置参数才能加载此类。
我将类导入脚本的顶部,并且还更改了get存储库方法。现在我有另一个错误。
$userRepository = $entityManager->getRepository( User::Class );
这是我应用更改时遇到的新错误。
致命错误:未捕获BadMethodCallException:未定义 方法“ getUser”。方法名称必须以findBy开头, findOneBy或countBy!在 /srv/www/simple-project/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:238堆栈跟踪:0 /srv/www/simple-project/index.php(78):Doctrine \ ORM \ EntityRepository-> __ call('getUser',Array)
1 /srv/www/simple-project/index.php(123):findUser(Object(Doctrine \ ORM \ EntityManager),数组)
2 {main}放在 238 行中的 /srv/www/simple-project/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php 中
谢谢。
答案 0 :(得分:1)
您必须使用命名空间类而不是类名。所以:
$userRepository = $entityManager->getRepository( 'Olive\Todo\User\User' );
如果php通过我个人使用的“导入”了它,您也可以使用这种语法:
$userRepository = $entityManager->getRepository( User::class );