2014-02-17 2 views
0

я должен следующие функции в моем симфони-веб-контроллера:Используя учение вместо SQL

private function findResponsibleDepartment($suche) 
{ 

    $doctrine = $this->getDoctrine(); 
    $em = $doctrine->getManager(); 
    $arrTerm = explode(" ", $suche); 
    for ($i = 0; $i < count($arrTerm); $i++) 
    { 
     $arrWhere[] = "gs.plz LIKE '" . $arrTerm[$i] . "'"; 
     //$arrParameter[] = "\"value".$i . "\" => \"%" .$arrTerm[$i]. "%\""; 
    } 

    $where = implode($arrWhere, " OR "); 
    //$param = implode($arrParameter, ","); 

    $query = $em->createQuery(' 
      SELECT nl.email 
      FROM MbsNiederlassungBundle:GebietStadt gs 
      INNER JOIN MbsNiederlassungBundle:Niederlassung nl WITH nl.id = gs.idNiederlassung 
      WHERE '. $where); 
    $result = $query->getResult(); 
    if(count($result) > 0) 
    { 
     $email = $result[0]["email"]; 
     return $email; 
    } 
    else 
    { 
     return false; 
    } 
} 

Я хочу использовать больше доктрину-заявление. Как мне изменить запрос для доктрины?

Или мне лучше создать пользовательский репозиторий?

+1

Первого репозиторием, да. Затем мы не делаем вашу работу, пытаемся создать ваши инструкции DQL/Doctrine, и если у вас возникнут определенные проблемы, вернитесь с новым вопросом. –

+0

Этот вопрос не соответствует теме, потому что речь идет о конкретном случае, который не является особенно полезным для других. –

ответ

1

Вы можете создать запрос с query builder

$qb = $em->createQueryBuilder() 
    ->select('nl.email') 
    ->from('MbsNiederlassungBundle:GebietStadt', 'gs') 
    ->innerJoin('MbsNiederlassungBundle:Niederlassung', 'nl', 'WITH', 'nl.id = gs.idNiederlassung'); 

for ($i = 0; $i < count($arrTerm); $i++) { 
    $ph = 'plz' . $i; 
    $qb->orWhere('gs.plz LIKE ' . $ph); 
    $qb->setParameter($ph, $arrTerm[$i]); 
} 
Смежные вопросы