我有一个将项目记录给项目经理的系统,
1 Project Can Have Multiple Project Managers
项目经理本质上只是系统用户,也许我脑子有问题,但我正在努力找出正确的关系来获取我需要的数据,我想要的是获取数据库、项目详细信息以及每个项目经理的用户详细信息。
我设想它是 1:n 关系,但我似乎无法获取我想要的数据,我正在使用 eloquent 来获取我的关系并加载数据,这是我的模型,
Project.php
public function projectmanager() {
return $this->belongsToMany('User');
}
User.php
public function projectmanager() {
return $this->belongsTo('Project');
}
但这似乎没有意义,在我看来,我需要我的项目表、用户表,然后是另一个用于存储 ID、用户 ID 和项目 ID 的表。
也许有人可以给我指出正确的方向,因为我现在只是让自己感到困惑
最佳答案
案例 1。
如果“一个项目可以有多个 PM” 和“一个 PM 只能有一个项目” - 您需要一对多 关系。
Project.php
public function managers()
{
return $this->hasMany('Manager');
}
Manager.php
public function project()
{
return $this->belongsTo('Project');
}
在本例中,您需要 2 个表:一张用于项目,一张用于 PM。 PMs表中应该有一个像project_id这样的字段,它是指向projects表中id字段的外键。
案例 2。
如果“一个项目可以有多个 PM” 和“一个 PM 可以有多个项目” - 那么您需要多对多 关系。
Project.php
public function managers()
{
return $this->belongsToMany('Manager');
}
Manager.php
public function projects()
{
return $this->belongsToMany('Project');
}
在本例中,您需要 3 个表:项目表、PM 表(在本例中没有外键)和所谓的数据透视表,其中包含项目和 PM 表中相应的 id 字段。
有关关系和模型的更多信息,您可以在以下位置学习:
- Laravel 4.2 Relationships
- Laravel 5.0 Relationships
- Laravel 6.x Relationships
- Laravel 7.x Relationships
- Laravel 8.x Relationships
取决于您使用的版本。
要创建这些表,您可以使用迁移。您可以在以下位置了解更多信息:
- Laravel 4.2 Migrations
- Laravel 5.0 Migrations
- Laravel 6.x Migrations
- Laravel 7.x Migrations
- Laravel 8.x Migrations
取决于您使用的版本。
关于php - 什么是正确的关系类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416407/