从 Laravel 的文档中,模型多态性定义如下:
多态关系允许模型在单个关联上属于多个其他模型
听起来它的设计目的是与belongsTo
而不是hasMany
侧面一起工作。这是我想要实现的场景:
在我的系统中,有很多项目类型,每个项目类型都有自己的发票字段布局。假设我们有一个Project
模型,它有一个type
字段,其值可以是contract
or part-time
。我们还有另外两个表被调用ContractInvoice
并PartTimeInvoice
定义它们各自的字段布局,这两个发票表都有一个project_id
引用项目记录。我想要做的是我想要一个通用接口来检索给定项目的所有发票,例如$project->invoices
.
当前解决方案
我不知道如何通过多态来实现这一点。所以我现在做的有点傻,在我的模型类方法中使用了一个switch
语句:invoice()
Project
switch ($this->type) {
case 'contract':
$model = 'App\ContractInvoice';
break;
case 'part-time':
$model = 'App\PartTimeInvoice';
break;
}
return $this->hasMany($model);
我觉得必须有更好的方法来做到这一点。有人可以阐明一下吗?