繁体   English   中英

数据库建模:按实体类型为空外键

[英]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_typedocumentable_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM