Laravel - 多个外键和获取ID [英] Laravel - Multiple foreign keys and getting id

查看:219
本文介绍了Laravel - 多个外键和获取ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试了一堆不同的东西,但似乎没有得到结果。

I tried a bunch of different things first but don't seem to be getting a result.

控制器:

public function all()
{
    $projects = Project::all();

    foreach($projects as $project) {
        $pid = $project->id;
    }

    $am = DB::table('projects')
        ->join('employees', 'projects.am_id', '=', 'employees.id')
        ->where('projects.id', '=', $pid)
        ->select('projects.id', 'projects.am_id', 'employees.name')
        ->first();

    $pm = DB::table('projects')
        ->join('employees', 'projects.pm_id', '=', 'employees.id')
        ->where('projects.id', '=', $pid)
        ->select('projects.id', 'projects.pm_id', 'employees.name')
        ->first();

    return view('projects/all', [
        'projects' => $projects, 'am' => $am, 'pm' => $pm
        ]);
}

查看:

<h1 class="text-center">All Projects</h1>
            @foreach ($projects as $project)
              <div class="row">
              <div class="col-md-6 text-center">
                <h3><a href="">{{ $project->company }}</a></h3>
              </div>
              <div class="col-md-6 text-center">
                <p>Account Manager: {{ $am->name }}</p>
                <p>Project Manager: {{ $pm->name }}</p>
              </div>
              </div>
              <hr>
            @endforeach

所以我想查看公司名称,项目经理和客户经理为每个项目。我看到的是所有项目的同一个人。我没有为每个项目挑选正确的管理员。

So I want to view the company name and the project manager and account manager for each project. What I'm seeing though is the same person for all projects. It's not picking up the correct managers for each project.

我尝试在控制器中执行for循环以获取项目ID,并将其传递到where子句,但没有

I tried doing the for loop in the controller to get the project ID and passing that in the where clause but that didn't work.

任何想法如何解决这个问题?

Any ideas how to fix this?

谢谢!

推荐答案

您对$ am和$ pm的查询不在foreach循环中。所以你只得到最后一个项目的$ am和$ pm值($ pid)

Your queries for $am and $pm are not inside the foreach loop. So you only gets the $am and $pm values for last project($pid)

public function all()
{
    $projects = Project::all();

    foreach($projects as $project) {
        $pid = $project->id;
        $am = DB::table('projects')
            ->join('employees', 'projects.am_id', '=', 'employees.id')
            ->where('projects.id', '=', $pid)
            ->select('projects.id', 'projects.am_id', 'employees.name')
            ->first();

        $pm = DB::table('projects')
            ->join('employees', 'projects.pm_id', '=', 'employees.id')
            ->where('projects.id', '=', $pid)
            ->select('projects.id', 'projects.pm_id', 'employees.name')
            ->first();
        $project->am = $am;
        $project->pm = $pm;
    }


    return view('projects/all', [
        'projects' => $projects
        ]);
}

查看

<h1 class="text-center">All Projects</h1>
@foreach ($projects as $project)
    <div class="row">
        <div class="col-md-6 text-center">
            <h3><a href="">{{ $project->company }}</a></h3>
        </div>
        <div class="col-md-6 text-center">
            <p>Account Manager: {{ $project->am->name }}</p>
            <p>Project Manager: {{ $project->pm->name }}</p>
        </div>
    </div>
<hr>
@endforeach

这篇关于Laravel - 多个外键和获取ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆