Выберите с MATCH AGAINST перерывы в новой Zend Framework

0

Мы создаем приложение против Zend Framework 1.12.7 - один из наших разработчиков установил несколько более новую версию (1.12.9), и поведение Zend_Db_Table_Select (или Zend_Db_Select) немного изменилось и нарушает один из наших запросов.

В частности, мы имели:

$select->from("search", array(
        "*",
        "bodyScore" => $dbAdapter->quoteInto("MATCH(body) AGAINST (?)", $search),
        "headingsScore" => $dbAdapter->quoteInto("MATCH(headings) AGAINST (?)", $search),
        "titleScore" => $dbAdapter->quoteInto("MATCH(title) AGAINST (?)", $search),
    ));

$ search - строка, $ select - Zend_Db_Table_Select, а $ dbAdapter - Zend_Db_Adapter_Pdo_Mysql

В 1.12.7 это создаст следующий запрос:

SELECT 
  'search'.*, 
  MATCH(body) AGAINST ('neoral') AS 'bodyScore', 
  MATCH(headings) AGAINST ('neoral') AS 'headingsScore', 
  MATCH(title) AGAINST ('neoral') AS 'titleScore' FROM 'search' ...

В 1.12.9 он генерирует: SELECT search. *, search. MATCH(body) AGAINST ('neoral') AS bodyScore, search. MATCH(headings) AGAINST ('neoral') AS headingsScore, search. MATCH(title) AGAINST ('neoral') AS titleScore FROM search...

Я понимаю принцип, лежащий в основе этого, и что это более правильный синтаксис в целом. Однако для этого конкретного запроса он MATCH(body) AGAINST ('neoral') столбец MATCH(body) AGAINST ('neoral') не найден в ошибках "field_list".

Каким будет (надеюсь, более правильный способ) построить мой запрос, чтобы он работал в 1.12.9?

Теги:
pdo
zend-framework

1 ответ

0

В этом случае вы должны использовать Zend_Db_Expr. Например, в вашем коде:

$select->from("search", array(
    "*",
    "bodyScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(body) AGAINST (?)", $search)),
    "headingsScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(headings) AGAINST (?)", $search)),
    "titleScore" => new Zend_Db_Expr($dbAdapter->quoteInto("MATCH(title) AGAINST (?)", $search)),
));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню