我基本上有 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');
}
我的模型測量資料功能:
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))"
uj5u.com熱心網友回復:
在您的測量模型更改中
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');
}
參考這個
uj5u.com熱心網友回復:
您對這些關系有一些錯誤:) 在您的測量模型函式中,您更改了measurement_field 和measurement_data。嘗試這個:
public function measurement_datas() {
return $this->hasMany(MeasurementData::class);
}
public function measurement_fields() {
return $this->hasManyThrough(MeasurementField::class, MeasurementField::class, 'measurement_field_id', 'measurement_id');
}
在您的 MeasurementField 模型函式中:
public function measurement_data() {
return $this->belongsTo(MeasurementsData::class, 'measurement_field_id');
}
在您的 MeasurementData 模型函式中:
public function measurement() {
return $this->belongsTo(Measurements::class, 'measurement_id');
}
public function measurement_field() {
return $this->hasOne(MeasurementType::class, 'type_id');
}
使用命名約定很重要。如果是一對多的關系,在“多”一側使用復數,在“一”一側使用單數。此外,關系的名稱應注明已建立關系的班級名稱,以免造成誤解。還要嘗試給出資料庫中顯示的正確鍵名。
有關更多資訊,您可以找到關于此主題的非常清晰和良好的檔案:https : //laravel.com/docs/8.x/eloquent-relationships
uj5u.com熱心網友回復:
我修復了它,在我的測量中:
public function measurement_data() {
return $this->hasManyThrough(MeasurementField::class, MeasurementField::class, 'measurement_field_id', 'measurement_id');
}
但是,這解決了我的問題:
public function measurement_fields() {
return $this->hasManyThrough(MeasurementField::class, MeasurementData::class, 'measurement_id', 'id');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359415.html
