【发布时间】:2018-02-16 09:01:09
【问题描述】:
我有属于过滤器组的过滤器 过滤器.php:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Filter extends Model
{
public function group()
{
return $this->belongsTo('App\FilterGroup');
}
public function products()
{
return $this->belongsToMany('App\Product', 'product_filters');
}
public function categories()
{
return $this->belongsToMany('App\Filter', 'category_filter');
}
}
以及与过滤器有多对多关系的类别 分类.php:
namespace App;
use App\Events\CategoryDelete;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $events = [
'deleting' => CategoryDelete::class
];
protected $table = 'categories';
public function parent()
{
return $this->belongsTo('App\Category', 'parent_id');
}
public function children()
{
return $this->hasMany('App\Category', 'parent_id');
}
public function parents()
{
$parentCategories = collect([]);
$parent = $this->parent;
while (!is_null($parent)) {
$parentCategories[] = $parent;
$parent = $parent->parent;
}
return $parentCategories->reverse();
}
public function products()
{
return $this->hasMany('App\Product');
}
public function filters()
{
return $this->belongsToMany('App\Filter', 'category_filter');
}
public function hasFilter($filter_id)
{
foreach ($this->filters as $filter) {
if ($filter->id == $filter_id) {
return true;
}
}
return false;
}
public function getFilterGroups()
{
$filterGroups = collect([]);
foreach ($this->filters as $filter) {
if (!$filterGroups->has($filter->group->id)) {
$filterGroups[$filter->group->id] = $filter->group;
}
}
return $filterGroups;
}
}
在类别视图中,我想显示过滤器及其过滤器组,但是当我尝试以下操作时:
@foreach($category->filters as $filter)
{{ $filter->group->name }}
<br>
@endforeach
它抛出试图获取非对象的属性异常 为什么我无法获取过滤器的组?
【问题讨论】:
-
有两种选择如何发生这种情况:1)您正在迭代的过滤器之一没有组。 2)你们的关系没有正确设置
-
类别似乎没有在模型中定义
filters关系 -
@DeepanshSachdeva 这是第五个方法了:)
-
@RossWilson 哎呀!我的错...忘记向下滚动代码。
-
关系似乎很好...我认为过滤器缺少组,它导致了这个问题。您需要先检查过滤器的组是否存在,然后尝试访问其名称。
标签: php laravel laravel-5.4 relationship