#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. Да, теперь у меня сработало. Я обновил вопрос ответом, который я использовал.