-1

少し問題があります。私のコードは機能していますが、適切な方法で実行していないと思います。

私の GradeController には、次のコードがあります。

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    if(auth()->user()->hasRole('Student')) {
        $subjects = Subject::all();

        return view('grades.student.index', compact('subjects'));
    }
}

そして、私の見解では、指定されたユーザーに属するグレードを次のように取得しています。

@foreach($subject->grades->where('student_id', '=', auth()->user()->id) as $grade)
<span class="badge badge-primary">
    {{ $grade->value }}
</span>@endforeach

これは、つまり Laravel です。これを行うためのより良い方法はありますか? サブジェクトに属するすべての成績を取得してから ID を探すのは、あまり「効果的」ではないと思うからです。

良い一日を過ごしてください。

4

2 に答える 2

1

ログインしているユーザーに属するグレードに基づいて 'grades` をwith()フィルタリングするクロージャーで、熱心な読み込みヘルパーを使用できます。subject

$subjects = Subject::with(['grades' => function($query) {
    $query->where('student_id', auth()->user()->id);
}])->get();

節から が削除, '=',されていることに注意してください。->where()等しいかどうかをチェックする場合、この引数は必要ありません。

于 2019-06-26T08:19:35.427 に答える