Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
if ($request->input('tags')) {
$tags = explode(",", (string)$request->input('tags'));
$query->join('post_tags as pt', function ($join) use ($tags) {
$join->on('p.id', '=', 'pt.post_id', 'left outer');
foreach ($tags as $tag) {
$join->where('pt.slug', '=', $tag);
}
});
} else {
$query->join('post_tags as pt', 'p.id', '=', 'pt.post_id', 'left outer');
}
суть примерно следующая хочу вырать все посты у которых есть все теги из `tags`
один тег выбирает но когда 2 выводит 0
так же было бы интересно если ты я сделал minus_tags т.е. посты у которых нет любого из minus_tags
Не в сети
$tags = explode(",", (string)$request->input('tags'));
$query->join('post_tags as pt', 'p.id', '=', 'pt.post_id')
->whereIn('pt.slug', $tags);
Не в сети
Поддерживаю nailfor, но...
Сначала надо выяснить в каком виде ты получаешь tags когда их несколько. Список через запятую можно разобрать через explode(). Но если в параметре tags уже массив, то будет ошибка. Тип зависит от фронта, мы его здесь не видим. Сделай временно вывод диагностики:
dd(request->input('tags'));
Если в выводе увидишь массив, то надо будет строку с explode переделать на
$tags = (array) request->input('tags')
И дальше можно так:
$query->join('post_tags as pt', 'p.id', '=', 'pt.post_id')
->when($tags, function ($query) use ($tags) {
$query->whereIn('pt.slug', $tags);
});
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1