Doctrine:具有可继承实体的自定义存储库方法

时间:2018-01-15 15:47:01

标签: symfony inheritance doctrine-orm doctrine repository

我有一个名为User的基本实体类,它有3个可能的不同子类EmployeeCustomerStudent。这是通过单个表继承实现的。

基类User有两个名为nameprename的字段,所有子类都继承这些字段。

现在我的问题:我有一个名为UserRepository的自定义存储库,其方法为findByFullTextSearch(string $searchterm): User[],我在这两个字段上实现了一些全文搜索,以满足我的需求(不幸的是,我做了)没有可能使用DoctrineExtensions为这个项目实现MySQL函数FIND_IN_SET或实际的全文搜索。)

我是否有可能只在UserRepository中编写此方法一次,所以当我使用$doctrine->getRepository(Student::class)->findByFullTextSearch('john doe');时,我只得到适合我从其调用的存储库的结果?

到目前为止我的解决方法:

  • 实施所有存储库类,将get_called_class()$this->_entityName传递给父类。
  • 调用基础存储库类并将子实体类作为参数传递给findByFullTextSearch

我在这里找到a related question,但不完全相同。

有更好的解决方案吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我刚刚通过简单地将基类添加为每个子实体的存储库来找到解决方案:

<?php

namespace UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * UserBundle\Entity\Customer.
 *
 * @ORM\Entity(repositoryClass="UserBundle\Repository\UserRepository")
 */
class Customer extends User
{
    // ...

这样我就不需要空的子存储库来为学说找到一个可能的入口点。