Laravel HasManyThrough Returns 属性 [X] 在此集合实例上不存在

Laravel HasManyThrough Returns Property [X] does not exist on this collection instance

我实际上设法从 HasManyThrough 关系中获取数据,但是当我想访问关系数据时,它抛出错误:

Property [publishings] does not exist on this collection instance.
(View: C:\Xampp\htdocs\wave\resources\views\pages\category.blade.php)

如下图所示,我收到了“发布”数据。

我从这个 Blade 文件中得到错误:

category.blade.php

@foreach ($data->publishings as $item)
  <div></div>
@endforeach

因为我有数据,下面的代码对于解决方案来说可能是不必要的,但它们在那里,以防万一。

CategoryController.php

public function index($category)
{
   $data = Category::where('slug', $category)
      ->with(['publishings' => function ($query) {
          $query->where('slug', '!=', 'placeholder')->latest()->paginate(10);
      }])->get();
   return view('pages.category')->with('data', $data);
}

Category.php

public function assets()
{
    return $this->hasMany('App\Models\Asset');
}
public function publishings()
{
    return $this->hasManyThrough('App\Models\Publishing', 'App\Models\Asset');
}

Asset.php

public function category()
{
    return $this->belongsTo('App\Models\Category');
}
public function publishings()
{
    return $this->hasMany('App\Models\Publishing');
}

Publishing.php

public function asset()
{
   return $this->belongsTo('App\Models\Asset');
}

感谢您的帮助。

如果有人遇到同样的问题并看到此消息,那么解决方案就我而言实际上非常简单。图片中的第3行说:

0 => App\Models\Category

我试图访问关系数据,就好像 $data 是一个对象一样。这就是为什么

$data->publishings 

抛出错误。解决方案是

$data[0]->publishings

或return仅来自控制器的数据:

return view('pages.category')->with('data', $data[0]);

您正在将 Eloquent 集合传递给视图。如果只想查询第一个结果,可以使用 Query Builder 的 first() 方法代替 get():

public function index($category)
{
    $data = Category::where('slug', $category)
        ->with(['publishings' => function ($query) {
            $query->where('slug', '!=', 'placeholder')->latest()->paginate(10);
        }])->first();
    return view('pages.category')->with('data', $data);
}