如何基于多个表实体创建 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 包含 professionalId
和 petId
用于存储关系宠物和专业。
同样,professional_categories
table 包含 professionalId
和 categoryId
字段来存储 professional
和 Categories
之间的关系。与 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();
}
}
因为我不知道你的包和实体类名称是什么,你需要修改它们。
我想在 symfony 中构建一个搜索过滤器。我正在使用 symfony 2.8。我有四个 table 受人尊敬的实体。 Table 是
professional
professional_pets
professional_categories
professional_organization
professional_pets
table 包含 professionalId
和 petId
用于存储关系宠物和专业。
同样,professional_categories
table 包含 professionalId
和 categoryId
字段来存储 professional
和 Categories
之间的关系。与 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();
}
}
因为我不知道你的包和实体类名称是什么,你需要修改它们。