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:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user