Может я не ас, но
$this->data['categories']->map->only(['id'])
1. map это метод... разве их можно обратиться к методу как к свойству в ларе? А если у тебя есть свойство `map` то будь осторожен, в ларе есть такой метод, а внутри там под капотом чуть ли не сравнение property_exists() method_exists() и всё на магии, можешь ухреначить свою модель и будет вопрос "как она вообще работает" а не "почему она неправильно работает"
2. only это для выборки если ты из массива сделал коллекцию
collect([ 'name' => 'vasia', 'age' => 30 ])->only('name'); // [ 'name' => 'vasia' ];
Roles::get()->only(['id' => 1]); // object Roles#1 (id => 1, title = ...)
3. чтобы взять список айдишников надо
$categories->pluck('id')->all(); // [1,2,3]
По поводу растягивания на 5-6 секунд - видишь ли у лары внутри очень много магии. Вероятно она или ищет, или пытается сделать toString() который там под капотом какой-нибудь serialize() вызывает. В общем говоря оно то работает, но запрос там получится из лютой дичи, WHERE id IN ({json}, {json}) и еще какой-то херни понаделает
Дебажить запросы var_dump($query->toSql(), $query->getBindings()); и смотришь.