如何基于多个表实体

时间:2016-11-24 06:36:56

标签: php symfony search filter dql

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

professional
professional_pets
professional_categories
professional_organization

professional_pets表包含professionalIdpetId用于存储关系宠物和专业人士。 同样,professional_categories表包含professionalIdcategoryId字段,用于存储professionalCategories之间的关系。与professional_organization相同的情况。

我想要的是我想要一个dql查询来过滤专业人员表格专业人员表,如果有可能只能从专业表中提取那些与special_pet,professional_categories和professional_organizations中的具体关系的记录。
在其他工作中,我希望在专业人员表格中为专业人士创建过滤器,如果他们在professional_pet,professional_categories和professional_organizations表中存在关系sotre。

我附上了过滤器的快照。提前感谢您的帮助。 enter image description here

1 个答案:

答案 0 :(得分:2)

编辑:

<?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();
    }
}

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