2016-11-24 6 views
0

symfonyで検索フィルタを作成したいと思います。私はsymfony 2.8を使用しています。私は尊重された実体を持つ4つのテーブルを持っている 表は複数のテーブルエンティティでsymfony 2検索フィルタベースを作成する方法

professional 
professional_pets 
professional_categories 
professional_organization 

professional_petsあるテーブルには、ストアの関係のペットとプロをprofessionalIdpetIdが含まれています。 professional_categoriesテーブルと同じ方法で、professionalCategoriesの間の関係を格納するフィールドは、professionalIdcategoryIdのフィールドを含みます。 professional_organizationの場合も同じです。

私は、プロフェッショナルテーブルからプロフェッショナルフォームのプロフェッショナルテーブルをフィルタリングする必要がある場合は、プロフェッショナルテーブルからプロフェッショナルテーブル、professional_categoriesおよびprofessional_organizationsで特定のレコードを抽出できるレコードのみを抽出できます。
私は、プロフェッショナルテーブルベースのプロフェッショナルのためのフィルターを作成したいと思っています。プロフェッショナルカテゴリ、プロフェッショナルカテゴリ、プロフェッショナル組織テーブルの中に関係がある場合は、

フィルタのスナップショットを添付しています。事前に助けてくれてありがとう。 enter image description here

+0

何か試しましたか? – Tiger

+0

私は試してみるのに正しいポイントを得ていませんでした。私はprofessionalRepositoryの機能を検索することができます。私の唯一の問題は、このためのdqlを書くことです。 –

答えて

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

私はあなたのバンドルおよびエンティティクラスの名前が何であるかを知らないので、あなたがそれらを変更する必要があります。

+0

もし空の場合(...)、array_key_exists(...)を実行する必要はありません。 - empty()はすべての作業を行います。 – Alex

+0

検索に関係するエンティティが何であっても、あなたは自分のコードをどうして入れますか?変更がなければ、コードは無関係です。 – Alex

+0

私はdqlに関する多くの経験がありません。だから実際に私はまた、各テーブルのクエリ内の参照が置かれていることを知りたい。使い方。 –

関連する問題