2017-03-25 10 views
0

SQLクエリ:DQLクエリを使用して、affiliation、feerange、insttype(チェックボックスデータ)を取得しようとしています。ここでSQLクエリをSymfony2に変換する方法DQL

は、SQLクエリです:

$affiliation = implode(",", array('1','2','3','4')); 
$feerange = implode(",", array('1','2','3','4','5','6')); 
$insttype = implode(",", array('1','2','3')); 
$dql = "SELECT i FROM Edufaction\Bundle\EdufactionBundle\Entity\Institute i" 
    . " JOIN i.instsummary s" 
    . " WHERE s.instaffiliation IN ($affiliation)" 
    . " AND s.insttype IN ($insttype)" 
    . " AND i.institutefeerange IN ($feerange)" 
    . " ORDER BY i.instituterating ASC"; 

私は2つのエンティティがあります。研究所エンティティ

/** 
* @ORM\Entity 
* @ORM\Table(name="institute") 
*/ 
class Institute { 
public static $instfeerange = array(1 => "₹", 
          2 => "₹₹", 
          3 => "₹₹₹", 
          4 => "₹₹₹₹", 
          5 => "₹₹₹₹₹", 
          6 => "₹₹₹₹₹₹", 
          0 => " " ); 
/** 
* @ORM\Id 
* @ORM\Column(type = "integer", name= "id") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 
/** 
* @ORM\OneToOne(targetEntity="InstSummary", mappedBy="institute") 
*/ 
protected $instsummary; 

/** 
* @ORM\Column(type="string",name="institutename", length=200,nullable=true) 
*/ 
protected $institutename; 

/** 
* @ORM\Column(type="string",name="institutefeerange", length=100,nullable=true) 
*/ 
protected $institutefeerange; 
/** 
* @ORM\Column(type="decimal", precision=19, scale=2, name="instituterating",nullable=true) 
*/ 
protected $instituterating; 

public function getId() { 
    return $this->id; 
} 

public function getInstitutename() { 
    return $this->institutename; 
} 

public function getInstitutefeerange() { 
    return $this->institutefeerange; 
} 
function getInststringfeerange() { 
    $aff = $this->institutefeerange; 
    $test = self::$instfeerange[$aff]; 
    return $test; 
} 
public function getInstituterating() { 
    return $this->instituterating; 
} 

public function setId($id) { 
    $this->id = $id; 
} 

public function setInstitutename($institutename) { 
    $this->institutename = $institutename; 
} 

public function setInstitutefeerange($institutefeerange) { 
    $this->institutefeerange = $institutefeerange; 
} 

public function setInstituterating($instituterating) { 
    $this->instituterating = $instituterating; 
} 

/** 
* Set instsummary 
* 
* @param \Edufaction\Bundle\EdufactionBundle\Entity\InstSummary $instsummary 
* 
* @return Institute 
*/ 
public function setInstsummary(\Edufaction\Bundle\EdufactionBundle\Entity\InstSummary $instsummary = null) { 
    $this->instsummary = $instsummary; 

    return $this; 
} 

/** 
* Get instsummary 
* 
* @return \Edufaction\Bundle\EdufactionBundle\Entity\InstSummary 
*/ 
public function getInstsummary() { 
    return $this->instsummary; 
} } 

InstSummaryエンティティ:ここで私は参照を通じて研究所InstSummaryテーブル間のOneToOne関係を適用しますinstitute_id

/** 
* @ORM\Entity 
* @ORM\Table(name="instsummary") 
*/ 
class InstSummary { 

public static $instituteaff = array(1 => "ICSE", 
          2 => "CBSE", 
          3 => "State Board", 
          4 => "ISC", 
          5 => "IGCSE", 
          6 => "IB", 
          7 => "Play School", 
          8 => "Not Applicable", 
          ''=>"" 
          ); 
public static $instype = array(1 => "Boys", 
          2 => "Girls", 
          3 => "Co-educational" 
          ); 
/** 
* @ORM\Id 
* @ORM\Column(type = "integer", name= "id") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

// ... 

/** 
* @ORM\OneToOne(targetEntity="Institute", inversedBy="instsummary") 
* @ORM\JoinColumn(name="institute_id", referencedColumnName="id") 
*/ 
protected $institute; 

/** 
* @ORM\Column(type="bigint", name="instaffiliation", length=50,nullable=true) 
*/ 
protected $instaffiliation; 
/** 
* @ORM\Column(type="integer", name="insttype", length=10,nullable=true) 
*/ 
protected $insttype; 

public function getId() { 
    return $this->id; 
} 

public function getInstaffiliation() { 
    return $this->instaffiliation; 
} 

function getInststringaffiliation() { 
    $aff = $this->instaffiliation; 
    $test = self::$instituteaff[$aff]; 
    return $test; 
} 

public function getInstituteid() { 
    return $this->instituteid; 
} 

public function getInsttype() { 
    return $this->insttype; 
} 
function getInststringtype() { 
    $type = $this->insttype; 
    $test = self::$instype[$type]; 
    return $test; 
} 

public function setId($id) { 
    $this->id = $id; 
} 
public function setInstaffiliation($instaffiliation) { 
    $this->instaffiliation = $instaffiliation; 
} 
public function setInstituteid($instituteid) { 
    $this->instituteid = $instituteid; 
} 

public function setInsttype($insttype) { 
    $this->insttype = $insttype; 
} 

/** 
* Set institute 
* 
* @param \Edufaction\Bundle\EdufactionBundle\Entity\Institute $institute 
* 
* @return InstSummary 
*/ 
public function setInstitute(\Edufaction\Bundle\EdufactionBundle\Entity\Institute $institute = null) { 
    $this->institute = $institute; 

    return $this; 
} 

/** 
* Get institute 
* 
* @return \Edufaction\Bundle\EdufactionBundle\Entity\Institute 
*/ 
public function getInstitute() { 
    return $this->institute; 
} 
} 

DQLクエリ:Symfony2のDQLクエリにSQLクエリを変換する方法

$data = $request->request->get('request'); 
$repository = $em->getRepository('EdufactionBundle:Institute'); 

$query1 = $repository->createQueryBuilder('i') 
     ->innerJoin('i.instsummary', 's')    
     ->select('s.id as instaffiliation, i.id as insttype') 
     ->where('s.id=:instaffiliation') 
     ->setParameter('instaffiliation', $data) 
     ->getQuery()->getResult(); 

?私はこのDQLクエリを試してみましたが、私は...私は、これは間違っていると思う

Plsのいずれかの助けになっていないです - 事前のためのおかげで...

答えて

2

あなたは離れ、すべてのコンマをチェックするためにINを使用する必要があります値は、以下のクエリを確認してください、それはあなたを助けることがあります。

$data = $request->request->get('request'); 
$repository = $em->getRepository('EdufactionBundle:Institute'); 
$queryBuilder = $repository->createQueryBuilder('i'); 
$query1 = $queryBuilder 
       ->innerJoin('i.instsummary', 's')    
       ->select('s.id as instaffiliation, i.id as insttype') 
       ->where('s.id IN (:instaffiliation)') 
       ->setParameter('instaffiliation', $data(should be array)) 
       ->getQuery()->getResult(); 
+0

それは私がのvar_dump($ Query1という)を使用して実行しよう@Maulik Savaliyaが動作していない;終了; – somesh

+0

私は配列を取得しています – somesh

+0

あなたはinstitutefeerange(instituteテーブル)を一度私のSQLクエリを参照してください。 – somesh

関連する問題