过滤结果之间有很多关系

时间:2019-03-08 14:15:51

标签: php mysql laravel

我正在努力过滤一些结果。.我有一个名为“ Process”的表,另一个名为“ Actors”的表。过程中有许多演员。这是模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Process extends Model
{
    public function actors()
    {
        return $this->hasMany(Actor::class)->orderBy('actor');
    }
}

因此,我有一个视图可以显示所有过程及其参与者。问题是,我想选择一个过滤器,以检查 Auth :: user()->用户名是否与Actor-> actor相同。

我尝试了以下方法:

public function index()
    {
        $processes = Process::all();

        $processes ->actors()->where('actor', 'Test')->get();

        return view('process.process', compact('processes '));

    }

(在出于测试目的与Test进行比较的地方,如果我确实可以正常工作,则将其更改为 Auth :: user()-> username

这将显示以下错误:

  

BadMethodCallException方法   Illuminate \ Database \ Eloquent \ Collection :: actors不存在。

我尝试了一些变体(例如,在控制器中运行foreach,但是我做错了,或者那不是做到这一点的方法...),但是没有任何效果。任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:1)

如果是的话,我假设您想获取当前经过身份验证的用户的所有进程。

public function index()
{
    $processes = Process::whereHas('actors',function($query){
                     $query->where('id',Auth::user()->id);
                  });

    return view('process.process', compact('processes '));

}