与用户表的关系,而无需使用标准的“ user_id”列名

时间:2019-09-17 11:48:51

标签: laravel eloquent

我有2个表,其中一个表具有不同的列,用于根据授权级别记录不同的用户名。但我想链接到两个在一起。目前,我已经尝试了以下方法:

User.php

public function approvals()
    {
        return $this->hasMany(Approval::class);

    }

Approval.php

public function qs() {
        return $this->belongsTo(User::class, 'id', 'qs');
    }

index.blade.php

<td>{{ $approval->qs->name }}</td>

批准数据库结构

Schema::create('approvals', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('project_id');
            $table->integer('stage');
            $table->unsignedBigInteger('qs')->nullable();
            $table->unsignedBigInteger('pm')->nullable();
            $table->unsignedBigInteger('rcm')->nullable();
            $table->unsignedBigInteger('doc')->nullable();
            $table->unsignedBigInteger('vpoc')->nullable();
            $table->unsignedBigInteger('vpof')->nullable();
            $table->timestamps();
        });

用户数据库结构

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email', 100)->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

我要解决所有这些错误吗,qs表列需要链接到users.id吗?

2 个答案:

答案 0 :(得分:0)

如果父模型不使用id作为其主键,或者您想将子模型连接到其他列,则可以将第三个参数传递给belongsTo方法:

public function qs() {
    return $this->belongsTo(User::class, 'foreign_key_here_from_child_table', 'custom_column_from_parent_table');
}

答案 1 :(得分:0)

似乎qsUser模型的用户ID。因此,与Approval模型的关系是

public function qs() 
    {
        return $this->belongsTo(User::class, 'qs');
    }

User模型中

public function approvals()
    {
        return $this->hasMany(Approval::class, 'qs');

    }

现在您可以使用

{{ $approval->qs->name }}
  

Eloquent通过检查关系方法的名称并在方法名称后加上_后跟主键列的名称来确定默认的外键名称。但是,如果模型上的外键不是parent_id,则可以将自定义键名称作为第二个参数传递给belongsTo方法。

Laravel Documentation