我想在symfony中构建一个搜索过滤器。我正在使用symfony 2.8。我有四张表与受尊敬的实体。 表是
professional
professional_pets
professional_categories
professional_organization
professional_pets
表包含professionalId
和petId
用于存储关系宠物和专业人士。
同样,professional_categories
表包含professionalId
和categoryId
字段,用于存储professional
和Categories
之间的关系。与professional_organization
相同的情况。
我想要的是我想要一个dql查询来过滤专业人员表格专业人员表,如果有可能只能从专业表中提取那些与special_pet,professional_categories和professional_organizations中的具体关系的记录。
在其他工作中,我希望在专业人员表格中为专业人士创建过滤器,如果他们在professional_pet,professional_categories和professional_organizations表中存在关系sotre。
答案 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();
}
}
由于我不知道您的包和实体类名称是什么,因此您需要修改它们。