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);
}
我实际上设法从 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);
}