Symfony中调用自定义仓库myData方法报错,如何解决?
问题解决方法
出现这个错误的核心原因是:你直接通过EntityManager获取的是Doctrine默认的EntityRepository实例,而非你写了自定义方法的Repository类,默认Repository仅支持以findBy、findOneBy或countBy开头的方法。
解决步骤如下:
1. 创建自定义DataRepository类
在src/Repository目录下新建DataRepository.php,将你的myData方法放在这个类中:
namespace App\Repository; use App\Entity\Data; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class DataRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Data::class); } public function myData() { $data = $this->createQueryBuilder('data') ->leftJoin('data.fields', 'f') ->andWhere('f.name = :field') ->setParameter('field', 'company'); $result = $data->getQuery()->execute(); return $result; } }
2. 在Data实体中关联自定义Repository
打开src/Entity/Data.php,通过注解指定该实体使用你刚创建的自定义Repository:
namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use App\Repository\DataRepository; #[ORM\Entity(repositoryClass: DataRepository::class)] class Data { // 你的实体属性、 getter/setter 等代码 }
3. 优化Controller中的调用方式(可选但推荐)
直接注入自定义Repository替代通过EntityManager获取,代码更清晰且符合Symfony最佳实践:
namespace App\Controller; use App\Repository\DataRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; class PagesController extends AbstractController { private DataRepository $dataRepository; public function __construct(DataRepository $dataRepository) { $this->dataRepository = $dataRepository; } /** * @Route("/page", name="page", methods={"POST", "GET"}) */ public function page(Request $request) { $data = $this->dataRepository->myData(); // 后续业务逻辑 } }
完成以上步骤后,重新运行项目,调用myData方法就不会再报错了。
内容的提问来源于stack exchange,提问作者peace_love
相关产品推荐
相关产品推荐

