【问题标题】:Two foreign keys pointing to the same table / model指向同一个表/模型的两个外键
【发布时间】:2016-12-07 05:49:33
【问题描述】:

我有两个模型:

  • 卡车
  • 驱动程序

TRUCK 有两个字段,它们是 FK。 Driver (FK)Driver2 (FK)

当我尝试用 driver 和 driver2 获取卡车时,我得到了两条相同的记录。

    $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 model-view-controller laravel-5 model eloquent


    【解决方案1】:

    默认情况下,laravel 将使用默认外键,

    Eloquent 假设关系的外键基于 型号名称#Further reading

    所以两个关系都指向同一个FK,所以你需要如下指定外键

       return $this->hasOne('App\Models\Driver', 'Driver');
       return $this->hasOne('App\Models\Driver', 'Driver2');
    

    完整代码

    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');
        }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 2018-11-11
      • 2017-01-09
      • 2017-10-13
      • 2012-02-28
      相关资源
      最近更新 更多