2017-07-21 6 views
1

のSymfony 3.3、 動作しない私はhttps://symfony.com/doc/current/doctrine/repository.htmlカスタムリポジトリは

$entityManager = $this->getDoctrine()->getManager(); 
$users = $entityManager->getRepository(Users::class)->findAllOrderedByName(); 

マニュアルに従ってん私は例外を取得:

BadMethodCallException: 
Undefined method 'findAllOrderedByName'. The method name must start with either findBy or findOneBy! 

    at vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php:226 
    at Doctrine\ORM\EntityRepository->__call('findAllOrderedByName', array()) 
    (src\AppBundle\Controller\DefaultController.php:28) 
    at Doctrine\ORM\EntityRepository->findAllOrderedByName() 
    (src\AppBundle\Controller\DefaultController.php:28) 
    at AppBundle\Controller\DefaultController->indexAction(object(Request)) 
    at call_user_func_array(array(object(DefaultController), 'indexAction'), array(object(Request))) 
    (var\cache\dev\classes.php:4453) 
    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) 
    (var\cache\dev\classes.php:4408) 
    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true) 
    (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Kernel.php:171) 
    at Symfony\Component\HttpKernel\Kernel->handle(object(Request)) 
    (web\app_dev.php:29) 

ユーザーエンティティ:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\UsersRepository") 
*/ 
class Users 
{ 
    ... 
} 

UsersRepository

namespace AppBundle\Repository; 

use AppBundle\Entity\Users; 
use Doctrine\ORM\EntityRepository; 

/** 
* Created by PhpStorm. 
* User: Hett 
* Date: 21.07.2017 
* Time: 14:25 
*/ 
class UsersRepository extends EntityRepository 
{ 

    public function findAllOrderedByName() 
    { 
     return $this->getEntityManager() 
      ->createQueryBuilder() 
      ->select("u") 
      ->from(Users::class, "u") 
      ->orderBy("name") 
      ->getQuery() 
      ->getArrayResult(); 
    } 
} 

私が理解しているように、$entityManager->getRepository(Users::class)はデフォルトのEntiryRepositoryを返します。どうして?私の間違いは何ですか?

UPD:私はキャッシュをクリアしようとしたが、それは効果がありません:

[email protected] MINGW64 /c/www/symfony (master) 
$ ./bin/console cache:clear 

// Clearing the cache for the dev environment with debug 
// true 

[WARNING] Calling cache:clear without the --no-warmup option is deprecated 
      since version 3.3. Cache warmup should be done with the cache:warmup 
      command instead. 

[OK] Cache for the "dev" environment (debug=true) was successfully cleared. 


[email protected] MINGW64 /c/www/symfony (master) 
$ ./bin/console doctrine:cache:clear-metadata 
Clearing ALL Metadata cache entries 
Successfully deleted cache entries. 

enter image description here

+1

通常、リポジトリマッピング問題のエンティティです。 Resources/config/doctrineに古いマッピングファイルがないことを確認してください。キャッシュをクリアすることを確認してください。時には、満月の下で歌うヘイ・ジュードも助けます。 – Cerad

+0

@Ceradは既に試しましたが、問題は解決しません(私の投稿を更新しました) – Hett

+0

複数のエンティティマネージャをお持ちですか? (わかりやすくするために:-)) –

答えて

0

私は.ymlのconfigsを理解するとして、私は、自動生成されたファイル src/AppBundle/Resources/config/doctrine/Users.orm.yml を持って、注釈のcongiruationを書き換え Users.org.ymlを削除するか、repositoryClass: AppBundle\Repository\UsersRepository行を追加するとすべて正常に動作します。 正しい方法は?

+1

あなたはどちらか一方(ymlまたは注釈)はできますが、両方はできません。アノテーションが好きな場合は、ymlファイルを削除してください。注釈が気に入らない場合は、ymlファイルを保管してください。あなたの選択。 – Cerad

関連する問題