如何从 table 中的 table 中的两个外键获取数据 laravel

How to get data from single table with two forigin keys from that table in laravel

可能是我的问题你不清楚,但我的英语很弱。所以假设,我有两个 tables 'user' 和 'project'。此项目 table 包含来自用户 table 的两个外键。

那是因为,我要标两个人

(1) person who implement the project (Employee)
(2) person who Mange or supervise the project (Manager)

user                       project 
--------------------       -----------------------------------------
user_id | name     |       |p_id  | name | manager_id | employee_id |
--------------------       -----------------------------------------
001     | manager  |       p001   |ABC   | 001       | 002
002     | employee |

您可以看到,项目 table 将用户 ID 引用为外键(manager_id 和 employee_id)。因为那两个人最初是用户。

我的问题是,如何通过使用 php laravel(Laravel Framework 5.5.45) 分别获得这些用户 什么时候我要显示项目详细信息,如下所示?

Project
-------------------------
project Name : ABC
Manage By : manager
Conduct By : employee
-------------------------

我找到了 MySQL 查询,但我现在还没有到 post 这里。我忘了为堆栈溢出添加书签 link.

您可以为此使用 eloquent 关系。在您的项目模型中使用两个关系,如下所示:

class Project extends Model
{
    public function manager()
    {
        return $this->belongsTo(User::class, 'manager_id');
    }

    public function employee()
    {
        return $this->belongsTo(User::class, 'employee_id');
    }
}

所以在视图中它会像

Project Name : {{ $project->name }}
Managed By : {{ $project->manager->name }}
Conduct By : {{ $project->employee->name }}

检查 Laravel Eloquent 关系 here

您应该添加

protected $table = 'project' because your table name like single. Laravel requred a single "s" whenever you create table like users,projects,services. in pivot table table name like user_role , role_permission etc.

class Project extends Model{

  protected $table = 'project';

  public function manager() {
    return $this->belongsTo(User::class, 'manager_id');
  }

  public function employee(){
    return $this->belongsTo(User::class, 'employee_id');
  }
}

用于在 Blade 文件中展示。

// Controller 
public function index(){
  $projects = Project::all();
  return view('blade_File_Destination_Here',compact('projects'));
}

在 Blade 文件中查看进程

@foreach($projects as $project)
   Project
   -------------------------
   Project Name : {{ $project->name }}
   Manage By : {{ $project->manager->name }}
   Conduct By : {{ $project->employee->name }}
   -------------------------

@endforeach

希望它对你有用

谢谢