定义三个 Laravel 模型之间的 Eloquent 关系和表格

问题描述 投票:0回答:1

我正在为我所属的俱乐部开发一个使用 Laravel/Vue/Inertia 的管理工具应用程序,我正在尝试确定如何最好地为三个模型创建 Eloquent 关系。

每年,每位会员都需要在俱乐部周围投入一定的工作时间来提供帮助。俱乐部分为多个区域,称为纪律。当成员投入他们的时间时,目前他们会填写一张纸条,其中包含学科、日期、时间,并需要学科“所有者”或该区域指定批准人的批准签名。这就是我想在我的应用程序中实现的。创建工作时间条目时,用户将输入日期、小时数、纪律和该纪律的指定批准人。

这意味着用户记录可以同时是 a) 纪律的批准者和 b) 为其提交工作时间记录的用户(但由于明显的原因,不能同时在一个工作时间记录上)。

所以在我看来,我需要三个模型和以下基于以下事实的字段:

  • 一个学科模型可以有多个审批者(用户),一个用户可以是多个学科的审批者(也就是多对多)
  • WorkHours 条目只属于一个用户 (user_id) 并且只有一个批准人 (approver_id)
  • 一个User可以有多个WorkHours记录,属于多个Disciplines

纪律

  • 姓名
  • approvers() = ->belongsToMany(User::class)

工作时间

  • 约会
  • 小时
  • member() = ->belongsTo(User::class)
    作为
    user_id
  • discipline() = ->belongsTo(Discipline::class)
  • approver() = ->hasOne(User::class)
    作为
    approver_id

用户

  • disciplines() = ->belongsToMany(Discipline::class)
  • workHours() = ->hasMany(WorkHours::class)

我的表格和相关字段将如下所示:

工作时间

  • id
  • user_id
  • approver_id

纪律

  • id
  • 姓名

用户

  • id
  • 姓名

学科_用户

  • user_id
  • 学科编号

这一切看起来都正确吗?还是有更好的方式来定义我的人际关系?

php laravel eloquent model relationship
1个回答
0
投票

详见here,这就是答案。

我的问题(正如我所怀疑的那样)是在关系定义中。一旦我从这个

更改了
approval()
中的
User

定义
    public function approval()
    {
        return $this->belongsTo(WorkHours::class, 'approver_id');
    }

到这个

    public function approvals()
    {
        return $this->haMany(WorkHours::class, 'approver_id');
    }

效果很好。没有用户 ID 值可写,因为

approver
的关系是错误的,这就是它寻找默认值的原因。

© www.soinside.com 2019 - 2024. All rights reserved.