Как оставить только те категории(и его родителя) в которых есть записи?

Есть категории и подкатегории. Сделал использую SimpleTree. Подкатегории могут иметь записи.(Записи отдельная модель)

Как оставить только те подкатегории и их родителей(категорий), которые имеют определенные записи?

Так всё правильно работают, но только подкатегории:

$query-> where( function ($query) use($type_radio) {
    $query->whereHas('record', function ($query) use($type_radio) { 
        $query->where('type', $type_radio);
    });
})->get();

Пробовал добавить orWhere и там перебирать с помощью метода map, но она почему то не изменяет запрос:

orWhere( function ($query) use($type_radio) { 
    $query->
        whereHas('record', function ($query) use($type_radio) { 
             $query->where('type', $type_radio);
         })->
        get()->map(function ($query ) { 
            $query = $query->parent()->get(); 
            Log::info($query ); 
            return $query;
        });
})

Ответы (1 шт):

Автор решения: Stanislav

Если хотите отфильтровать категории, то нужно использовать join. Как пример, использовать scope:

public function scopeCategories($query, $parentId)
    {
        return $query
            ->join('records', 'records.parent_id', 'categories.id')
            ->where('records.parent_id', $parentId)
    }
→ Ссылка