在模型中创建范围函数时我有奇怪的行为
class Measurement extends Model {
public function scopeGetMeasurement($query, $user_id) {
$measurements = $query->where('user_id', $user_id)
->join('measurement_metas', 'measurements.id', '=', 'measurement_metas.measurement_id')
->join('units', 'measurement_metas.unit_id', '=', 'units.id');
return $measurements;
}
}
我有3个这样的表:测量
发生什么$measurements
返回id
作为unit_id
而不是measurements.id
我做错了什么?
澄清:我想要的只是'id'变成='measurements.id'而不是'units.id',但是因为'units.id'最后出现,所以它显示为'id'。
您的查询选择所有连接表(SELECT *
)的所有列,因此最后一个id
列(unit
)将覆盖之前的列(measurements
,measurement_metas
)。
您应该为这种查询使用关系: https://laravel.com/docs/5.6/eloquent-relationships
例如:
用户→HasMany
→测量
测量→HasMany
→Measurement_Meta
Measurement_Meta→BelongsTo
→单位
然后使用预先加载来一次加载它们:
User::find($user_id)->load('measurements.metas.unit')