С помощью функции find_in_set() в предложении laravel where

#laravel #find-in-set

#laravel #найти в наборе

Вопрос:

Я знаю, что могу использовать 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 столбце (который содержит разделенные запятыми идентификаторы категорий)

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

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

Ответ №1:

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

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