【问题标题】:Laravel 5.4 can't get relation of elloquent modelLaravel 5.4 无法获得 elloquent 模型的关系
【发布时间】: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


【解决方案1】:

我将 Filter 模型中的 group() 方法更改为 filterGroup,现在当我调用 $filter->filterGroup 时,它可以正常工作。我不知道为什么,也许 group 是一些保留字之类的。

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 2017-08-03
    • 2017-10-04
    • 1970-01-01
    • 2017-07-07
    • 2022-01-23
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多