如何处理 Eloquent 中一个 table 中的两个外键的关系?

How to handle relationship with two foreign keys from one table in Eloquent?

我有 table 个用户和专业化。 :

Users:
id (primary, auto increment)
user_id (unique)
hex_id (unique)
status (boolean)

Specialization:
id (primary, auto increment)
user_id (foreign key from users)
hex_id (foreign key from users)
description (text)

用户和专业化之间的控制者关系类型应该是什么?是一对一吗?或一比多?

问题是当我在表单提交期间将数据添加到专业化 table 时,我的 user_id 从关系中获得自动填充但不是 hex_id,给我错误:

..hex_id doesn't have default value..

是否可以仅使用关系自动填充专业化 table 中的两个外键?

PS 我无法更改架构的结构。

你的 hex_id 是什么?它来自经过身份验证的用户吗? 也没有人能告诉您它是一对一还是多对多。你应该知道你打算在这里归档什么。 如果一个用户有很多专业化,并且一个专业化属于一个用户,那么它就是一对多。此外,您不需要用户 table 中的 user_id 和 hex_id。以下示例基于您的解释。如果您从控制器共享 moere 代码,我们可以为您提供更多帮助。

In your USERS Model:

public function specializations()
{
  return $this->hasMany('App\Specialization');
}


In your SPECIALIZATION Model
public function user()
{
  return $this->belongsTo('App\User','user_id');
}`

public function hex()
{
  return $this->belongsTo('App\User','hex_id');
}`

我们可以在创建记录之前添加 hax_id 值,在您的 Specialization 模型中,您可以添加如下函数。 (确保删除 hax_id 字段上的所有验证)

we can use beforeCreate event of modal for this. if user_id are hax_id same then we can just assign it, if in your case it is different then you can fetch user from DB using user_id and access its hax_id and use it. please check below code.

use \Backend\Models\User;

// inside your `Specialization` model
public function beforeCreate()
{
    $this->hax_id = $this->user_id;
    // or if its not the case and user_id and hax_id are not same then.
    // $user = User::find($this->user_id);
    // $this->hax_id = $user->hax_id;
}

in this way hax_id will automatically added to your record. beforeCreate will work only on record creation, you can replace beforeCreate with beforeSave to make this happen all the time create and update.

如有疑问请评论。