Получите все строки, которые имеют одно из указанных значений в своем столбце в laravel 5.7

#laravel #laravel-5.7

#laravel #laravel-5.7

Вопрос:

У меня есть таблица базы данных, как показано ниже.

     Schema::create('x_poll_questions', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('question');
            $table->text('batch_ids');
            $table->timestamps();
        });
  

У меня есть такие данные, как,

 1 |  test question 1 | ["1","4","2"]
2 |  test question 2 | ["1","5","3"]
3 |  test question 3 | ["1"]
4 |  test question 4 | ["3", "2"]
  

В batch_ids столбце у меня есть значение, подобное ["1","4","2"] . Которое является декодированным в формате json значением массива php.

Теперь, как я могу написать запрос, который проверяет, присутствуют ли указанные значения (пример 1,2) в столбце batch_ids. Если да, то верните строку.

Требуется вывод в виде

 1 |  test question 1 | ["1","4","2"]
4 |  test question 4 | ["3", "2"]
  

ОБНОВЛЕННЫЙ ОТВЕТ

Добавление следующей функции в модель опроса сработало для меня.

     public function scopeFilterByBatchIds($q, $batchIds)
    {
        if ($batchIds) {
            $batches = explode(',', $batchIds);

            foreach ($batches as $batchId) {
                $q->where('batch_ids', 'like', '%"' . $batchId . '"%');
            }
        }

        return $q;
    }
    ```
  

Ответ №1:

Найдите запрос к БД, в котором вам нужно будет соответствующим образом настроить

 $filter_apostrophe = str_replace('"','', $value);
$separate_the_value = explode(',', $filter_apostrophe);

$data = DB::table('x_poll_questions')
      ->where('batch_ids','like','%'."".$separate_the_value."".'%') //Filter "" or not
      ->get()
  

Какой формат ввода в поле поиска

Комментарии:

1. Это больше похоже на проверку всех значений. Мне нужно, чтобы присутствовало любое из значений, тогда также должен быть получен результат.

2. @NiteshKesarkar Каковы входные данные. Я обновил код.

3. Да, теперь у меня сработало. Я обновил вопрос ответом, который я использовал.