首页 > 解决方案 > Laravel hasManyThrough 嵌套时出错

问题描述

我基本上有 3 个要嵌套的表,2 个已经工作但我无法让 hasManyThough 工作。我的桌子:

tablename : measurements            
id  
client_id   (not important for now.)
            
tablename : measurement_data            
id  
measurement_id  
measurement_field_id    
data        
    
tablename : measurement_fields          
id         
type_id    (not important for now)
name       
enabled   
                    

这是我的控制器功能:

    public function index()
    {
        return JsonResource::collection(Measurement::with(['clients', 'measurement_data', 'measurement_fields'])->get());
    }

我的模型测量功能:

    public function clients() {
        return $this->belongsTo(Client::class, 'client_id');
    }

    public function measurement_field() {
        return $this->hasMany(MeasurementData::class);
    }

    public function measurement_data() {
        return $this->hasManyThrough(MeasurementField::class, MeasurementField::class, 'measurement_field_id', 'measurement_id');
    }

我的模型 MeasurementData 功能:

    public function measurements() {
        return $this->belongsTo(Measurements::class, 'measurement_id'); 
    }

    public function measurement_fields() {
        return $this->hasOne(MeasurementType::class, 'type_id');
    }

我的模型 MeasurementField 功能:

    public function measurements() {
        return $this->belongsTo(MeasurementsData::class, 'measurement_field_id'); 
    }

每当我获取它时,我都会在控制台中得到它:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'measurement_fields.measurement_field_id' in 'field list' (SQL: select `measurement_data`.*, `measurement_fields`.`measurement_field_id` as `laravel_through_key` from `measurement_data` inner join `measurement_fields` on `measurement_fields`.`id` = `measurement_data`.`measurement_id` where `measurement_fields`.`measurement_field_id` in (1, 2, 3))"

标签: sqllaravelvue.jseloquent

解决方案


在您的测量模型更改中

public function measurement_data() {
    return $this->hasManyThrough(MeasurementField::class, MeasurementField::class, 'measurement_field_id', 'measurement_id');
}

public function measurement_data() {
        return $this->hasManyThrough(MeasurementField::class, MeasurementData::class, 'measurement_id', 'measurement_field_id');
    }

参考这个


推荐阅读