2016-08-02 116 views
0

外键我有两个型号:两个指向同一个表/模型

  • 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和东西,我会被卡住。我应该创建另一个模型吗?

回答

1

默认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'); 
    } 
相关问题