Поиск записи по колонке с массивом

Мне нужно реализовать вывод записей из БД при выборе нескольких категорий.

При выборе чекбоксов с нужными категориями я, при помощи Ajax, передаю в бэк массив с ID выбранных категорий. Данные выглядят так: ['1', '2']. В БД у каждой записи есть колонка category_ids в которой указаны категории по которым их можно найти. Хранятся так: ["1", "2", "3"]. Но столкнулся с тем, что проект использует библиотеку fluentPDO и как реализовать выборку не пойму.

Пожалуйста, если не знаете ответа, как решить, то и не пишите, какой fluentPDO плохой и что надо использовать что-то поновее и моднее или по типу "ну подумай сам". Понятно, вы тут самые умные, крутые, а я тупой. Не будем тратить время на пустые бла-бла.

public function getByProjectsAjax($data = '')
    {
        $query = DB::db()->from(Projects::getTable())
            if (!empty($data['categoryFilter'])) {
                $query->where('category_ids = ?', array(json_encode($data['categoryFilter']));
            }
            $query->orderBy('id DESC')
            ->fetchAll();
        return $query;
    }


Ответы (2 шт):

Автор решения: Vivi

Как вариант попробуй использовать SELECT IN. Должно всё выглядеть следующим образом:

// Значения для условия IN
$values = [1, 2, 3, 4];
// Построение запроса SELECT с условием IN
$query->where('category_ids IN ?', $values);
→ Ссылка
Автор решения: Aquila

Рашение нашел грубоватое, но если есть у кого идеи, как сделать лучшее...

if (!empty($data['categoryFilter'])) {
  $string_version = implode(',', $data['categoryFilter']);
  $ids = '';
                
  foreach ($data['categoryFilter'] as $key => $item) {
    $ids .= ' OR JSON_CONTAINS(projects.category_ids, "[\"'.$item.'\"]")';
  }
                
  $query->where(
    'JSON_CONTAINS(projects.category_ids, "[\"'.$string_version.'\"]") '.$ids.'',
  );
}

→ Ссылка