Использование find_in_set() в предложении laravel where

Я знаю, что могу использовать find_in_set, как показано ниже:

select `id` from `questions` where FIND_IN_SET(8, categories);

Но я использую laravel и хочу написать туда этот запрос. Я пробовал это:

$q_category = 8;
$object = DB::table("questions")
  ->select('id')
  ->where(DB::RAW("FIND_IN_SET($q_category, categories)"), '!=', null)
  ->get();

чтобы получить записи, которые имеют 8 в столбце categories (который содержит идентификаторы категорий, разделенные запятыми)

Но я получаю записи, у которых тоже нет идентификатора категории.

где я ошибаюсь?


person Afghan Dev    schedule 18.04.2019    source источник


Ответы (1)


Я вижу несколько потенциальных проблем с вашим текущим кодом. Во-первых, вы должны привязать значение $q_category к вызову FIND_IN_SET. Во-вторых, проверка успешного вызова FIND_IN_SET заключается в том, что возвращаемое значение больше нуля, а не NULL.

$q_category = 8;
$object = DB::table("questions")
    ->select('id')
    ->whereRaw("FIND_IN_SET(?, categories) > 0", [$q_category])
    ->get();
person Tim Biegeleisen    schedule 18.04.2019