首页 > 解决方案 > 此集合实例上不存在属性 [apps]

问题描述

我正在尝试从每个类别中获取应用程序,但它给我的属性 [应用程序] 在此集合实例上不存在

这是刀片

@foreach($app_categories->apps as $item)  @endforeach

控制器

$app_categories = AppCategory::orderBy('name', 'asc')->get();

类别型号

public function apps()
{
    return $this->belongsToMany(App::class, 'app_categories_relate')->orderBy('created_at', 'desc');
}

应用模型

public function appcategory()
{
    return $this->belongsToMany(AppCategory::class, 'app_categories_relate');
}

标签: laravel

解决方案


这是错误的:

@foreach($app_categories->apps as $item)  @endforeach

$app_categories是一个Collection,所以你不能访问apps。您需要迭代两次:

@foreach($app_categories as $app_category)
  @foreach($app_category->apps as $item)
    ...
  @endforeach
@endforeach

或者,返回一个AppCategory

$app_category = AppCategory::orderBy('name', 'asc')->first();

...

@foreach($app_category->apps as $item)
  ...
@endforeach

编辑:建议使用的其他答案with()对于提高性能很有用,但不是必需的。如果您不使用->with('apps'),性能会因N+1查询逻辑而受到影响(在循环中执行多个查询,而不是预加载它们)


推荐阅读