Вы здесь

Как сделать db_like() по нескольким словам?

1

Имеется callback для autocomplete поля. Прекрасно ищет по тексту целиком.

function mymodule_autocomplete_callback($string) {
  $search = explode(" ", $string);

  $query = db_select('taxonomy_term_data', 't');
  $query->fields('t', array('tid', 'name'));
  $query->condition('name', '%' . db_like($string) . '%', 'LIKE');
  $query->condition('vid', VID_BRANDS);
  $query->groupBy('name');
  $result = $query->range(0, 10)->execute();

  $matches = array();
  foreach ($result as $row) {
    $matches[$row->name] = check_plain($row->name);
  }

  drupal_json_output($matches);
}

Требуется сделается поиск по нескольким словам.
Например: "Машинка швейная" - поиск отдельно по "машинка" и "швейная"

$search = explode(" ", $string); // массив строк
Как передать этот массив в запрос?
db_like - принимает строку
добавить через цикл в $db_or=db_or->condition(..) ->condition... - не удается в цикле организовать эту цепочку

Версия Drupal: 
7.x
Категория: 
Database API
Вопрос задан 14.12.2016 - 08:20

Ответы

0
foreach ($search as $value) {
  $query->condition('name', '%' . db_like($value) . '%', 'LIKE');
}
Ответ дан 14.12.2016 - 09:33
Аватар пользователя xandeadx
xandeadx
1442

Но таким образом, условия будут объединены db_and.

Комментарий оставлен 14.12.2016 - 11:18

как вы и просили - ""машинка" и "швейная""

Комментарий оставлен 14.12.2016 - 18:22
0

Решено: сделал через db_or.

  $or = db_or();
  foreach ($search as $value) {
    $or->condition('name', '%' . db_like($value) . '%', 'LIKE');
  }
  $query->condition($or);

Самое интересное, что пробовал таким способом, но выдавало ошибку ... но это уже другая история

Ответ дан 14.12.2016 - 11:20
-2

Вам нужен db_or примеров в коде много.

Ответ дан 14.12.2016 - 17:32