php - 什么是正确的关系类型

标签 php mysql laravel relational-database eloquent

我有一个将项目记录给项目经理的系统,

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 字段。

有关关系和模型的更多信息,您可以在以下位置学习:

取决于您使用的版本。

要创建这些表,您可以使用迁移。您可以在以下位置了解更多信息:

取决于您使用的版本。

关于php - 什么是正确的关系类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416407/

相关文章:

php - 如果上一页 == X.com 则运行 PHP 查询

mysql - 基于字符串的部分匹配连接 MySQL 表

php - 在 foreach 循环中获取多个表单输入值

php - Laravel Carbon 返回错误的时间

php - 在本地计算机上使用 S3 类遇到 cURL 错误,但在主机上运行正常

php - 如果我想在我的登录页面 (php) 中使用 128 位 ssl,我可以使用什么

php - PEAR HTML_Quick Form函数和处理数据

mysql - 在 Mysql 中排序然后分组

php - 在 Laravel 中使用路由过滤器

php - Laravel 加入 : Trying to get property of non-object