Laravel查询模型

时间:2018-02-28 21:37:23

标签: php mysql laravel

在模型

中创建范围函数时,我遇到了奇怪的行为
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 measurement_metas

measurement_metas单元

units $measurements返回id unit_id而非measurements.id的情况 JSON

我做错了什么?

洁肤: 我想要的只是'id'成为''measurements.id'而不是'units.id',但由于'units.id'最后出现,它显示为'id'。

1 个答案:

答案 0 :(得分:1)

您的查询选择所有已加入表格的所有列(SELECT *),因此最后id列(unit)会覆盖之前的列(measurements,{{1 }})。

您应该使用关系进行此类查询:
https://laravel.com/docs/5.6/eloquent-relationships

例如:
用户→measurement_metas→测量
测量→HasMany→Measurement_Meta
Measurement_Meta→HasMany→单位

然后使用预先加载来一次加载它们:

BelongsTo