Add the ability to filter components by tags. Closes #2920

This commit is contained in:
James Brooks 2018-06-18 21:22:43 +01:00
parent 77281a7cc5
commit ab64572274
4 changed files with 12 additions and 11 deletions

View File

@ -37,6 +37,10 @@ class ComponentController extends AbstractApiController
$components = Component::enabled();
}
if ($tags = Binput::get('tags')) {
$components->withAnyTags($tags);
}
$components->search(Binput::except(['sort', 'order', 'per_page']));
if ($sortBy = Binput::get('sort')) {

View File

@ -14,7 +14,7 @@ namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Models\Traits\Taggable;
use CachetHQ\Cachet\Models\Traits\HasTags;
use CachetHQ\Cachet\Presenters\ComponentPresenter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
@ -23,7 +23,7 @@ use McCool\LaravelAutoPresenter\HasPresenter;
class Component extends Model implements HasPresenter
{
use SearchableTrait, SoftDeletes, SortableTrait, Taggable, ValidatingTrait;
use HasTags, SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait;
/**
* List of attributes that have default values.

View File

@ -14,7 +14,7 @@ namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Models\Traits\Taggable;
use CachetHQ\Cachet\Models\Traits\HasTags;
use CachetHQ\Cachet\Presenters\IncidentPresenter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
@ -30,7 +30,7 @@ use McCool\LaravelAutoPresenter\HasPresenter;
*/
class Incident extends Model implements HasPresenter
{
use SearchableTrait, SoftDeletes, SortableTrait, Taggable, ValidatingTrait;
use HasTags, SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait;
/**
* Status for incident being investigated.

View File

@ -12,16 +12,15 @@
namespace CachetHQ\Cachet\Models\Traits;
use CachetHQ\Cachet\Models\Tag;
use CachetHQ\Cachet\Models\Taggable as TaggableModel;
use Illuminate\Database\Eloquent\Builder;
use InvalidArgumentException;
/**
* This is the taggable trait.
* This is the has tags trait.
*
* @author James Brooks <james@alt-three.com>
*/
trait Taggable
trait HasTags
{
/**
* Get the tags relation.
@ -43,7 +42,7 @@ trait Taggable
{
$tags = static::convertToTags($tags);
return $tags->each(function ($tag) use ($query) {
$tags->each(function ($tag) use ($query) {
$query->whereHas('tags', function (Builder $query) use ($tag) {
return $query->where('id', $tag ? $tag->id : 0);
});
@ -65,9 +64,7 @@ trait Taggable
return $query->whereHas('tags', function (Builder $query) use ($tags) {
$tagIds = $tags->pluck('id')->toArray();
// dd($tagIds);
$query->where('taggables.tag_id', '=', 1);
$query->whereIn('taggables.tag_id', $tagIds);
});
}