【发布时间】:2019-03-08 14:15:51
【问题描述】:
我正在努力过滤一些结果。我有一个名为“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()->username 是否与 Actor->actor 相同。
我尝试了一些类似的东西:
public function index()
{
$processes = Process::all();
$processes ->actors()->where('actor', 'Test')->get();
return view('process.process', compact('processes '));
}
(在我为测试目的与测试进行比较的地方,如果我确实让它工作,我显然会将其更改为 Auth::user()->username)
这显示以下错误:
BadMethodCallException 方法 Illuminate\Database\Eloquent\Collection::actors 不存在。
我尝试了一些变体(例如,在控制器中运行一个 foreach,但要么我做错了,要么这不是这样做的方法......)但无济于事。非常感谢任何帮助!
【问题讨论】:
-
你是否能够在没有任何地方和其他地方的情况下获得
$processes->actors的演员集合? -
是的,在我看来,我有一个这样的 foreach:“@foreach ($processes->actors as $actor)”,它工作得很好。
-
那你可以试试
$processes->actors->where('actor', 'Test')告诉我你得到了什么吗? -
我做到了,而且有效。问题是,这样做所有进程仍然显示,只有在每个进程中我只显示称为“测试”的演员。我一直在寻找的是只显示其中有一个名为“测试”的参与者的进程。
-
$processes->actors()->get()得到什么?