在模型
中创建范围函数时,我遇到了奇怪的行为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'。
答案 0 :(得分:1)
您的查询选择所有已加入表格的所有列(SELECT *
),因此最后id
列(unit
)会覆盖之前的列(measurements
,{{1 }})。
您应该使用关系进行此类查询:
https://laravel.com/docs/5.6/eloquent-relationships
例如:
用户→measurement_metas
→测量
测量→HasMany
→Measurement_Meta
Measurement_Meta→HasMany
→单位
然后使用预先加载来一次加载它们:
BelongsTo