我有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吗?
答案 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)
似乎qs
是User
模型的用户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方法。