Почему выбрасывает ошибку в view во время foreach?
Когда в шаблоне я вывожу 
echo $temp[0]->category->name;
то отображает имя категории, а если прогнать через foreach:
Потому что так вы выводите название категории первой сущности, а foreach проходит по всем, значит у какой-то сущности нет категории
Все очень просто, у одной из $calculator нет category, конкретно у первой очевидно есть.
Проверьте так:foreach ($temp as $key=>$calculator) {
    echo (isset($calculator->category))?$calculator->category->name:'не задано для '.$key;
}