Мне нужен запрос моей модели с методом (где) и использованием 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);
}
Какой лучший способ сделать это?
Вам нужно добавить дополнительный 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;
});
}
Других решений пока нет …