2017-01-30 7 views
0

Любая идея, как добавить оценки в ORDER BY с построением запросов доктрины? Следующий запрос вызывает ошибку Expected end of string, got '+'.Порядок доктрин по сравнению со счетом несколько таблиц

$qb = $this->createQueryBuilder('i') 
      ->select(
       'partial i.{ '.$fields.' }', 
       'partial c.{ id, title, description }', 
       'partial c2.{ id }', 
       'partial ch.{ id, name, icon, description }', 
       'partial t.{ id, tagname }', 
       "MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) as score1", 
       'MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN) as score2' 
      ) 
      ->join('i.categories', 'c') 
      ->leftJoin('c.parent', 'c2') 
      ->leftJoin('i.tags', 't') 
      ->join('i.status', 's') 
      ->join('c.channel', 'ch') 
      ->join('ch.company', 'co') 
      ->where("(MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) > 5 OR MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN) > 5)") 
      ->setParameters([ 
       'searchTerm' => $searchTerm.'*', 
      ]) 
      ->orderBy('score1 + score2', 'DESC'); 
+0

Вы должны использовать запятую (,) вместо + -> orderBy ('score1, score2', 'DESC'); если вы хотите оба варианта DESC. –

+0

Я уже пробовал это, но он не суммирует оценки, я нашел, что решение заключалось в том, чтобы суммировать баллы в select вместо порядка на –

ответ

0

Ничего, я решил это, просто добавив поля вместе. Doh.

$qb = $this->createQueryBuilder('i') 
      ->select(
       'partial i.{ '.$fields.' }', 
       'partial c.{ id, title, description }', 
       'partial c2.{ id }', 
       'partial ch.{ id, name, icon, description }', 
       'partial t.{ id, tagname }', 
       "(MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) + MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN)) as score" 
      )