EntityManager不会使用psr-4命名空间加载存储库

时间:2019-04-05 14:24:24

标签: php doctrine

我试图找到我数据库中的所有用户,并且当我试图获取存储库时,由于无法找到要查找的内容,所以理论映射失败。

我的代码中有一个名称空间。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

您必须使用命名空间类而不是类名。所以:

$userRepository = $entityManager->getRepository( 'Olive\Todo\User\User' );

如果php通过我个人使用的“导入”了它,您也可以使用这种语法:

$userRepository = $entityManager->getRepository( User::class );