You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:20:28