1
0
mirror of https://github.com/flarum/core.git synced 2025-08-07 17:07:19 +02:00

Merge branch 'dk/20220318-tag-index' into dk/20220324-performance-test

This commit is contained in:
Daniël Klabbers
2022-03-24 14:28:04 +01:00

View File

@@ -55,21 +55,21 @@ class TagFilterGambit extends AbstractRegexGambit implements FilterInterface
{ {
$slugs = explode(',', trim($rawSlugs, '"')); $slugs = explode(',', trim($rawSlugs, '"'));
$query->where(function (Builder $query) use ($slugs, $negate) { $query
->distinct()
->leftJoin('discussion_tag', 'discussions.id', '=', 'discussion_tag.discussion_id')
->where(function (Builder $query) use ($slugs, $negate) {
foreach ($slugs as $slug) { foreach ($slugs as $slug) {
if ($slug === 'untagged') { if ($slug === 'untagged' && ! $negate) {
$query->whereIn('discussions.id', function (Builder $query) { $query->orWhereNull('discussion_tag.tag_id');
$query->select('discussion_id') } elseif ($slug === 'untagged' && $negate) {
->from('discussion_tag'); $query->orWhereNotNull('discussion_tag.tag_id');
}, 'or', ! $negate); } elseif ($id = $this->tags->getIdForSlug($slug)) {
} else { $query->orWhere(
$id = $this->tags->getIdForSlug($slug); 'discussion_tag.tag_id',
$negate ? '!=' : '=',
$query->whereIn('discussions.id', function (Builder $query) use ($id) { $id
$query->select('discussion_id') );
->from('discussion_tag')
->where('tag_id', $id);
}, 'or', $negate);
} }
} }
}); });