Laravel multilpes где Like с массивом

Мне нужен запрос моей модели с методом (где) и использованием LIKE для поиска результатов;

Это мой код:

public function scopeTags($query, $tags)
{
/*
* random = [ 'tag1', 'tag2', 'tag3', ...]
*/
$random = $tags[rand(0, count($tags) - 1)];
return $query->where('tags', 'LIKE', "%{$random}%");
}

Мне нужно что-то подобное:

public function scopeTags($query, $tags)
{
/*
* random = [ 'tag1', 'tag2', 'tag3', ...]
*/
foreach($tags as $tag) {
$random[] = "%{$tag}%";
}
return $query->where('tags', 'LIKE', $random);
}

Какой лучший способ сделать это?

0

Решение

Вам нужно добавить дополнительный where вызов функции для каждого тега:

public function scopeTags($query, $tags)
{
/*
* random = [ 'tag1', 'tag2', 'tag3', ...]
*/
foreach($tags as $tag) {
$query->where('tags', 'LIKE', "%{$tag}%"); //this will be a AND
//$query->OrWhere('tags', 'LIKE', "%{$tag}%"); //this will be a OR
}
return $query;
}

или если вам нужно смоделировать WHERE (tags like '%tag1%' AND tags like'%tag2%' AND ...) AND (something else) с круглыми скобками:

public function scopeTags($query, $tags)
{
return $query->where(function($q) use($tags) {
foreach($tags as $tag) {
$q->where('tags', 'LIKE', "%{$tag}%"); //this will be a AND
//$q->OrWhere('tags', 'LIKE', "%{$tag}%"); //this will be a OR
}
return $q;
});
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector