在用户模型中使用whereHas获取用户相关建筑物eloquent

时间:2017-10-22 04:05:55

标签: php mysql sql laravel eloquent

我在App \ User Model文件中有以下方法

Public function buildings(){
        return Building::whereHas('area', function ($q) {
            $q->whereHas('users', function ($q) {
                $q->where('users.id', auth()->id());
            });
        })->get();
    }

当我尝试在View文件中获取用户建筑物时,我收到此错误:

@foreach (Auth::user()->buildings as $b)
    {{$b->name}}
                @endforeach

App \ User :: buildings必须返回关系实例。 (查看:C:\ xampp \ htdocs \ hse \ resources \ views \ observation \ form_observation.blade.php)

我尝试了web.php中的代码,它的工作意味着关系设置是完美的,但我希望它在用户模型中工作

Route::get('/', function () {
    return App\Building::whereHas('area', function ($q) {
$q->whereHas('users', function ($q){
    $q->where('users.id',11);
});
    })->get();
});

1 个答案:

答案 0 :(得分:1)

在你的视图文件中,你应该调用buildings()函数以返回一个Relation实例(即返回一个关系对象)

更改

@foreach (Auth::user()->buildings as $b)
    {{$b->name}}
                @endforeach

@foreach (Auth::user()->buildings() as $b)
    {{$b->name}}
                @endforeach