Ошибка прямая.Вы не получили никаких объектов переменной $ category_name и пытаетесь получить доступ к значению свойства name.Что не определено, потому что нет объекта.
Добавьте простое условие, чтобы исправить это следующим образом
public function viewProducts(){
$products = Product::get();
$products = json_decode(json_encode($products));
foreach($products as $key => $val){
$category_name = Category::where(['id'=>$val->category_id])->first();
if($category_name != null){
$products[$key]->category_name= $category_name->name;
}
}
echo "<pre>";print_r($products);die;
return view('admin.products.view_products')->with(compact('products'));
}
Чтобы отправить данные на ваш блейд:
# Controller:
$data['category_name'] = $category_name;
$data['products'] = $products;
->withKeyName($data);
# Blade:
{{ $KeyName['category_name'] }}
{{ $KeyName['products'] }}