我正在为我所属的俱乐部开发一个使用 Laravel/Vue/Inertia 的管理工具应用程序,我正在尝试确定如何最好地为三个模型创建 Eloquent 关系。
每年,每位会员都需要在俱乐部周围投入一定的工作时间来提供帮助。俱乐部分为多个区域,称为纪律。当成员投入他们的时间时,目前他们会填写一张纸条,其中包含学科、日期、时间,并需要学科“所有者”或该区域指定批准人的批准签名。这就是我想在我的应用程序中实现的。创建工作时间条目时,用户将输入日期、小时数、纪律和该纪律的指定批准人。
这意味着用户记录可以同时是 a) 纪律的批准者和 b) 为其提交工作时间记录的用户(但由于明显的原因,不能同时在一个工作时间记录上)。
所以在我看来,我需要三个模型和以下基于以下事实的字段:
纪律
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)
我的表格和相关字段将如下所示:
工作时间
纪律
用户
学科_用户
这一切看起来都正确吗?还是有更好的方式来定义我的人际关系?
详见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
的关系是错误的,这就是它寻找默认值的原因。