2017-07-21 3 views
1

Symfony 3.3, ich nach der Dokumentation https://symfony.com/doc/current/doctrine/repository.htmlBenutzerdefinierte Repository funktioniert nicht

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

ich Ausnahme:

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) 

Benutzer Einheit:

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(); 
    } 
} 

Wie ich verstehe $entityManager->getRepository(Users::class) zurückgeben Standard EntiryRepository. Warum? Was ist mein Fehler?

UPD: Ich habe versucht, Cache zu löschen, aber es hat keine Wirkung:

[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

In der Regel handelt es sich um ein Entity-to-Repository-Mapping-Problem. Stellen Sie sicher, dass Sie unter Resources/config/doctrine keine alten Mapping-Dateien haben. Stellen Sie sicher, dass Sie den Cache löschen. Gelegentlich hilft auch das Singen von Hey Jude bei Vollmond. – Cerad

+0

@Cerad bereits versucht, aber es löst nicht Problem (Ich aktualisierte meinen Beitrag) – Hett

+0

Haben Sie mehrere Entity Manager? (aus Gründen der Übersichtlichkeit :-)) –

Antwort

0

Ich habe automatisch generierte Datei src/AppBundle/Resources/config/doctrine/Users.orm.yml Wie ich .yml configs neu schreibt Anmerkungen congiruation verstehen, wenn ich Users.org.yml entferne oder Zeile repositoryClass: AppBundle\Repository\UsersRepository hinzufüge - alles gut. Welche Methode ist richtig?

+1

Sie können das eine oder das andere (Yml oder Annotation), aber nicht beides. Wenn Sie Anmerkungen mögen, dann entfernen Sie einfach die XML-Dateien. Wenn Sie Anmerkungen nicht mögen, behalten Sie die XML-Dateien bei. Deine Entscheidung. – Cerad

Verwandte Themen