我正在尝试为我的Symfony 2.8网站使用自定义存储库:
自定义存储库:
// src/AppBundle/Entity/ExperimentationRepository
namespace AppBundle\Entity;
use Doctrine\ORM\EntityRepository;
class ExperimentationRepository extends EntityRepository
{
public function getExperimentationByUser($id){
// do stuff and return results
}
}
实体:
// src/AppBundle/Entity/Experimentation
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Experimentation
*
* @ORM\Table(name="experimentation")
* @ORM\Entity(repositoryClass="AppBundle\Entity\ExperimentationRepository")
*/
class Experimentation{
// sutff
}
控制器(我试图在另一个包中使用自定义存储库):
// src/ManageBundle/Controller/ManageController
$em = $this->getDoctrine()->getManager();
$experimentations = $em->getRepository('AppBundle:Experimentation')->getExperimentationByUser($id);
我遇到了以下错误:
未定义方法 'getExperimentationByUser'。方法名必须以 findBy 或 findOneBy 开头!
在一些研究后,我尝试检查是否调用了我的自定义存储库:
$repository=$this->getDoctrine()
->getRepository('AppBundle:Experimentation');
$repositoryClass=get_class($repository);
echo $repositoryClass;
exit;
这将返回:
Doctrine\ORM\EntityRepository
所以我猜我的自定义存储库根本没有被调用。但是我找不到原因。我尝试了几个操作(经过一些挖掘):
- 清除缓存(
app/console cache:clear
) - 清除Doctrine缓存(
app/console doctrine:cache:clear-metadata
) - 检查config.yml(在doctrine:orm下):
auto_mapping:true
- 检查config.yml(在doctrine:dbal下):
type:annotation
- 我没有任何config / doctrine文件夹(这正常吗?)
感谢您的帮助!
app/console doctrine:mapping:info
使用“OK”标签选择所有实体。 - DavidLORM\Entity(repositoryClass="Test")
。您应该会收到致命错误:Fatal error: Class 'Test' not found in...
如果您没有收到此错误,则说明注释未被正确读取。 - Wilt