在模型内创建作用域函数时出现奇怪的行为
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
) 会覆盖前面的列(测量
、measurement_metas
)。
您应该对此类查询使用关系:
https://laravel.com/docs/5.6/eloquent-relationships
例如:
用户 → HasMany
→ 测量
测量→HasMany
→Measurement_Meta
Measurement_Meta → 属于
→ 单位
然后使用急切加载一次性加载它们:
User::find($user_id)->load('measurements.metas.unit')
关于php - Laravel 查询模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49039005/