如何基于多个表实体创建 symfony 2 搜索过滤器

How to create a symfony 2 search filter base on the multiple tables entities

我想在 symfony 中构建一个搜索过滤器。我正在使用 symfony 2.8。我有四个 table 受人尊敬的实体。 Table 是

professional
professional_pets
professional_categories
professional_organization

professional_pets table 包含 professionalIdpetId 用于存储关系宠物和专业。 同样,professional_categories table 包含 professionalIdcategoryId 字段来存储 professionalCategories 之间的关系。与 professional_organization.

相同的情况

我想要的是我想要一个 dql 查询来从专业人士 table 中过滤专业人士,如果可能的话,它可以只从专业人士 table 中提取与 [=30] 中的特定内容相关的那些记录=]、professional_categories 和 professional_organizations.
在其他工作中,我希望根据 professional_pet、professional_categories 和 professional_organizations [=36= 中是否存在与他们相关的关系,为专业人士 table 中的专业人士创建过滤器]s.

我附上过滤器的快照。提前感谢您的帮助。

编辑:

<?php

namespace CommonBundle\Entity\Children;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;


class professionalRepository extends EntityRepository
{

    public function findAllBySearch($searchValues)
    {
        /** @var QueryBuilder $query */
        //professional entity
        $query = $this->createQueryBuilder('p');

        if(!empty($searchValues['pet_id'])){
            $query->join('AppBundle:ProfessionalPets', 'pp', 'WITH', 'pp.professionalId = p.id');
            $query->andWhere('pp.petId = :pet_id')
                ->setParameter('pet_id', $searchValues['pet_id']);
        }
        if(!empty($searchValues['cat_id'])){
            $query->join('AppBundle:ProfessionalCategories', 'pc', 'WITH', 'pc.professionalId = p.id');
            $query->andWhere('pc.categoryId = :cat_id')
                ->setParameter('cat_id', $searchValues['cat_id']);
        }
        if(!empty($searchValues['org_id'])){
            $query->join('AppBundle:ProfessionalOrganization', 'po', 'WITH', 'po.professionalId = p.id');
            $query->andWhere('po.organizationId = :org_id')
                ->setParameter('org_id', $searchValues['org_id']);
        }

        return $query->getQuery()->getResult();
    }
}

因为我不知道你的包和实体类名称是什么,你需要修改它们。