[英]database modeling: null foreign keys by entity type
我需要一些帮助来设计我的数据库关系。 我有这些表:文档、公司、个人和用户。 文档可以是内部的或外部的。
在任何情况下,文件都由单个实体(公司、个人或用户)签署。 我正在考虑通过以下方式创建文档表:
documents
----------
id_document
...
type
id_user
id_company
id_indiv
其中type
可以是 0: internal, 1: external 和id_user
, id_company
, id_indiv
是各自表的外键,可以为空。 这个逻辑好吗? 有人可以建议我一个更好的主意吗?
Laravel 的 Eloquent Eloquent ORM
提供了Polymorphic
关系来处理此类问题。
更具体地说,您可以放置两个字段; document
表中的documentable_type
和documentable_id
。 然后将这些关系方法添加到每个模型中;
class Document extends Model
{
/**
* Get the owning imageable model.
*/
public function signer()
{
return $this->morphTo();
}
}
class User extends Model
{
/**
* Get the documents signed by this user.
*/
public function documents()
{
return $this->morphMany('App\Models\Document', 'documentable');
}
}
class Company extends Model
{
/**
* Get the documents signed by this company.
*/
public function documents()
{
return $this->morphMany('App\Models\Document', 'documentable');
}
}
class Individual extends Model
{
/**
* Get the documents signed by this individual.
*/
public function documents()
{
return $this->morphMany('App\Models\Document', 'documentable');
}
}
然后您可以使用以下代码段;
$document->signer; // This returns either user or company or individual
$company->documents; // This returns a collection of document models which is signed by this company
$individual->documents;
$user->documents;
有关更多详细信息,请参阅此链接; https://laravel.com/docs/8.x/eloquent-relationships#polymorphic-relationships
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.