【问题标题】:How I can create correctly table structure `workers` or how can I create correctly Eloquent Relationships in Laravel?如何正确创建表结构“workers”或如何在 Laravel 中正确创建 Eloquent 关系?
【发布时间】:2018-12-08 18:02:31
【问题描述】:

我有示例workers 表结构:

我有两种类型的工人:公司工人公司分支机构工人。类型字段只能是:12。 1 - 是公司工作人员,2 - 是分公司工作人员。如何现在我无法编写正确的关系方法来获取用户公司类型(分支机构或公司)。还是我必须创建 2 个表(company_workers_table 和 company_branch_workers_table)才能正确编写 eloquent 关系?

【问题讨论】:

    标签: database laravel database-design eloquent relationship


    【解决方案1】:

    您正在寻找多态关系:

    https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations

    您想为您的工作人员设置两列,而不仅仅是类型一,让我们将此关系称为workplace。您的 workers 表将具有 workplace_idworkplace_type 列。 type 列保存相关模型的类(即App/Company),id 列保存相关模型的 ID,因此工作人员可能与公司或公司分支机构相关。

    您的模型将如下所示:

    class Worker extends Model
    {
        public function workplace()
        {
            return $this->morphTo();
        }
    }
    
    class Company extends Model
    {
        public function workers()
        {
            return $this->morphMany('App\Worker', 'workplace');
        }
    }
    
    class Branch extends Model
    {
        public function workers()
        {
            return $this->morphMany('App\Worker', 'workplace');
        }
    }
    

    【讨论】:

    • 表结构最后会是什么样子? Sample ? @杰夫
    • @Otabek workplace_id 是一个无符号整数。 workplace_type 是一个字符串。您可以使用$table->morphs('workplace'); 自动创建这些列,而不是逐一创建。
    • 当我向公司添加新员工时,返回此错误消息Add [user_id] to fillable property to allow mass assignment on [App\Employee]. 。我该如何解决? @杰夫
    • @Otabek 这是一个不相关的问题,您的模型需要 $fillable$guarded 属性。 laravel.com/docs/5.6/eloquent#mass-assignment
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多