Laravel:一个实体有2个外键如何显示属于特定表的那个实体?

时间:2018-10-04 03:15:46

标签: laravel eloquent foreign-keys relational-database

我有一个实体呼叫提交,它有2个外键用户和任务。 一个用户有很多提交,提交属于多个用户。 一个任务有很多提交,提交属于很多任务。 在我的控制器中

-Option

在我看来

public function go_to_self_marking($id){

    $task = Task::find($id);
    //auth user 
    $user = auth()->user();
    $task_criterias = $task->criterias;
    $user_submissions = $user->submissions;

    //user task criterias submission
    return view('criterias/self-marking')
        ->with('task_criterias',$task_criterias)
        ->with('task',$task)
        ->with('user_submissions',$user_submissions);
}

通过这种方式,我可以显示所有提交,但无法实现该提交属于指定任务。 我的每个任务都显示所有链接到用户的提交。我该如何解决?

我更改了控制器中的代码

<div>
    @if($user_submissions!== null )
        @foreach($user_submissions as $user_submission)
            <object type="text/html" data="{{$user_submission->url}}"
                width="400px" height="350px"
                style="overflow:auto;border:5px ridge blue">
            </object>
        @endforeach
    @else                            
        <p>No submissions</p>
    @endif
</div>

我认为

public function go_to_self_marking($id,Submission $submission){
        $task =Task::find($id);
        //auth user
        $user = auth()->user();
        $task_criterias =$task->criterias;

        $task_submissions =$task->submissions;

        //user task criterias submission
        return view('criterias/self-marking')->with('task_criterias',$task_criterias)
            ->with('task',$task)->with('task_submissions',$task_submissions)->with('submission',$submission);


    }

现在,提交属于指定任务,但是每个用户都可以访问该提交。

1 个答案:

答案 0 :(得分:0)

我相信您需要submissions,它属于特定的user和特定的task

在控制器功能中。

public function go_to_self_marking($id)
{

    $task = Task::find($id);
    $user = auth()->user();

    // these are the submissions you want.
    $user_task_submissions = $task->submissions()
        ->where('user_id', $user->id)
        ->get();

    ...
    ...
    // rest of the code goes here.
    // send these $user_task_submissions to your view.
    // and iterate over them in your view.
}