首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel枢轴表需要有重复的条目

Laravel枢轴表需要有重复的条目
EN

Stack Overflow用户
提问于 2021-07-06 02:35:20
回答 1查看 402关注 0票数 1

我正在使用Laravel建立一个小客户名单系统。

我需要把公司和CONTACT_PERSON联系起来。在正常情况下,我可以使用多到多个枢轴表来链接和更新它们。

不过,我需要保存历史记录。这意味着同一人可以在较早的时期内担任联络人,辞职,并在以后的另一个时期重新任命。

我尝试用phpMyAdmin复制枢轴表条目,使同一公司将同一CONTACT_PERSON链接两次,并在检索公司记录时找到两个条目。

然而,如何使用Laravel复制条目?如何使用Laravel来冻结那些。还是我做错了?

非常感谢!

编辑:示例:

A公司在01-01-2001至02-02-2001年间雇用A先生,而Compnay A则在03-03-2001至04-04-2001年间再次雇用A先生。有B,C,D公司..。在公司表中,雇员表中也有B,C,D先生。

使用Laravel关系枢轴表将A公司与A先生联系起来,在上述情况下将有两条记录(我需要有历史记录)。

这是正确的方式来处理这样的案件与拉勒维尔许多到许多关系?还是我应该考虑其他方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-06 06:53:30

枢轴表可以包含附加栏。您可以考虑将添加started_atresigned_at日期时间字段的迁移添加到透视表中。

您的数据结构如下所示:

公司

  • id
  • ..。

Contact_person_company

  • contact_person_id
  • company_id
  • started_at
  • resigned_at

联系人

  • id
  • ..。

在此之后,您可以在模型中创建函数来处理pivot列并检查它们的状态。resigned_at列的空值表示ContactPerson仍然处于活动状态。

代码语言:javascript
复制
<?php

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class Company extends Model
{
    // ... other functions

    public function contactPersons(): BelongsToMany
    {
        $this->belongsToMany(Company::class)
            ->withPivot('started_at', 'resigned_at')
            ->wherePivotNull('resigned_at');
    }

    public function resignedContactPersons()
    {
        $this->belongsToMany(Company::class)
            ->withPivot('started_at', 'resigned_at')
            ->wherePivotNotNull('resigned_at');
    }

}

您也应该在ContactPerson模型上定义这些函数。

如果逻辑变得非常复杂,请考虑创建一个枢轴模型 (CompanyContactPerson)。

请注意,contact_person_idcompany_id started_at的组合应该是唯一的。否则,考虑添加一个主键,比如ID -- company_contact_person表,以标识这些记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68263853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档