我正在使用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先生联系起来,在上述情况下将有两条记录(我需要有历史记录)。
这是正确的方式来处理这样的案件与拉勒维尔许多到许多关系?还是我应该考虑其他方法?
发布于 2021-07-06 06:53:30
枢轴表可以包含附加栏。您可以考虑将添加started_at和resigned_at日期时间字段的迁移添加到透视表中。
您的数据结构如下所示:
公司
Contact_person_company
联系人
在此之后,您可以在模型中创建函数来处理pivot列并检查它们的状态。resigned_at列的空值表示ContactPerson仍然处于活动状态。
<?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_id、company_id started_at的组合应该是唯一的。否则,考虑添加一个主键,比如ID -- company_contact_person表,以标识这些记录。
https://stackoverflow.com/questions/68263853
复制相似问题