public function getMediaMatchAll(array $tags)
{
$this->rehydrateMediaIfNecessary($tags);
//group all tags for each media
$model_tags = $this->media->reduce(function ($carry, Media $media) {
$carry[$media->getKey()][] = $media->pivot->tag;
return $carry;
}, []);
//exclude media not matching all tags
return $this->media->filter(function (Media $media) use($tags, $model_tags) {
return count(array_intersect($tags, $model_tags[$media->getKey()])) === count($tags);
})->keyBy(function (Media $media) {
return $media->getKey();
})->values();
}