2013-12-19 47 views
0

我有2個機構客戶與黨之間的多對多關係:symfony的學說查詢不工作

//Prif\ProtocoleBundle\Entity\Guest 

/** 
* @var string 
* 
* @ORM\ManyToMany(targetEntity="Prif\ProtocoleBundle\Entity\Party", cascade={"persist"}) 
* 
*/ 
private $parties; 

我犯了一個形式,我可以用複選框添加許多各方來賓

\\Prif\ProtocoleBundle\Form\GuestType 

    public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder 

      ->add('name', 'text', array(
       'required'=>true)) 

      ->add('firstname', 'text', array(
       'required'=>true)) 

      ->add('parties', 'entity', array(
       'class' => 'PrifProtocoleBundle:Party', 
       'property' => 'name', 
       'expanded' => true, 
       'multiple' => true, 
       'required'=>false 
      )) 

然後我做了一個搜索表單(PartySearchType),我可以選擇一個或多個派對。當我提交此表,我想有一個已被添加到的各方賓客

這是在倉庫中我的搜索功能

//Prif\ProtocoleBundle\Entity\GuestRepository 
/** 
* Summary 
* @param object $name_parties   Description 
* 
* @return object     Description 
*/ 
public function searchGuestByParty(array $name_parties) { 

    $query = $this->createQueryBuilder('g'); 

     $query->Join('g.parties', 'p') 
       ->where($query->expr()->in('p.name', $name_parties)); 


     return $query->getQuery() 
       ->getResult(); 

控制器我的搜索行動

/** 
* @Route("/", name="guest) 
* @Template() 
*/ 
public function searchAction(Request $request) { 
    $entity = new Guest(); 

    $form = $this->createForm(new PartySearchType(), $entity); 

    if ($request->getMethod() == 'POST') { 
     $form->handleRequest($request); 

     $parties = $form['parties']->getData(); 
     //var_dump($parties) this var_dump shows me a result of selected parties 
      $repository = $this->getDoctrine() 
        ->getManager() 
        ->getRepository('PrifProtocoleBundle:Guest'); 

      $guests = $repository->searchGuestByParty(array($parties)); 
      //var_dump($guests) this var_dump shows me: array (size=0) empty; 

      return $this->render('PrifProtocoleBundle:Guest:result.html.twig', array(
         'entities' => $guests, 
          ) 
      ); 
    } 
    return array(
     'form' => $form->createView(), 
    ); 
} 

} 

var_dump($ guests)的結果:

array (size=0) empty 

部分樹枝視圖

\\result.html.twig 

{% block body -%} 
<h1>List of guests </h1> 
<table class="records_list"> 
    <thead> 
     <tr> 
      <th>name</th> 
      <th>surname</th> 
     </tr> 
    </thead> 
    <tbody> 
    {% for entity in entities %} 
     <tr > 
      <td>{{ entity.name }}</td> 
      <td>{{ entity.surname }}</td> 
     </tr> 
    {% endfor %} 
    </tbody> 
</table> 
{% endblock %} 

我的問題:

我不知道我在GuestRepository功能查詢,以及我稱之爲控制器的方式,當我讓堂妹在其上的var_dump我不明白沒有結果。 所以視圖是空的!有人可以看看代碼並告訴我什麼是錯的?感謝您的時間

回答

0

我已經更改了存儲庫功能,現在它的工作原理!

它根據在表單中選擇雙方

public function searchGuestByParty($parties) { 

    $name_parties = array(); 


    for($i = 0; $i < count($parties); ++$i){ 

     $name_parties[$i]= $parties[$i]->getName(); 
    } 

    $query = $this->createQueryBuilder('g'); 

    $query->Join('g.parties', 'p') 
      ->where($query->expr()->in('p.Name', $name_parties)); 


    return $query->getQuery() 
        ->getResult(); 
} 

控制器搜索行動並沒有太大變化

public function searchAction(Request $request) { 
$entity = new Guest(); 

$form = $this->createForm(new PartySearchType(), $entity); 

if ($request->getMethod() == 'POST') { 
    $form->handleRequest($request); 

    $parties = $form['parties']->getData(); 

     $repository = $this->getDoctrine() 
       ->getManager() 
       ->getRepository('PrifProtocoleBundle:Guest'); 

     $guests = $repository->searchGuestByParty($parties); 


     return $this->render('PrifProtocoleBundle:Guest:result.html.twig', array(
        'entities' => $guests, 
         ) 
     ); 
} 
return array(
    'form' => $form->createView(), 
); 

}

}

0

乍一看,您似乎將$ name_parties傳遞給searchGuestByParty,但在where子句中使用$ nom_name_parties,一個未初始化的變量。它可以這麼簡單嗎?

+0

檢索客人嗨,謝謝你的回覆。這只是一個打字錯誤,我做了!因爲我已經把這個問題從法語翻譯成英語。改變了! – Albee

+0

這是var_dump($ guests)的結果:array(size = 0)empty(也許它可以幫助,謝謝) – Albee