两个指向同一个表/模型
问题描述:
外键我有两个型号:两个指向同一个表/模型
- TRUCK
- DRIVER
TRUCK有两个字段其FKS。 Driver (FK)
和Driver2 (FK)
。
当我试图让与驱动器和驱动2卡车,我得到两个相同的记录。
$truck = $this->instance->truck()->where('id', $id)
->with(['driver', 'driver2',])
->firstOrFail();
我的车型号:
class Truck extends Model
{
use SoftDeletes;
protected $table = 'trucks';
protected $guarded = ['id'];
protected $dates = ['deleted_at'];
public function driver()
{
return $this->hasOne('App\Models\Driver');
}
public function driver2()
{
return $this->hasOne('App\Models\Driver');
}
我的驱动程序模型:
class Driver extends Model
{
use SoftDeletes;
protected $table = 'drivers';
protected $guarded = ['id'];
protected $dates = ['deleted_at'];
public function truck()
{
return $this->belongsTo('App\Models\Truck');
}
我还是新的laravel和东西,我会被卡住。我应该创建另一个模型吗?
答
默认laravel将使用默认的外键,
雄辩假设基础上, 型号名称#Further reading
所以两者关系的关系外键都指向同一个FK,所以你需要指定如下的外键
return $this->hasOne('App\Models\Driver', 'Driver');
return $this->hasOne('App\Models\Driver', 'Driver2');
Full code
class Truck extends Model
{
use SoftDeletes;
protected $table = 'trucks';
protected $guarded = ['id'];
protected $dates = ['deleted_at'];
public function driver()
{
return $this->hasOne('App\Models\Driver', 'Driver');
}
public function driver2()
{
return $this->hasOne('App\Models\Driver', 'Driver2');
}