Laravel查询模型

问题描述 投票:0回答:1

在模型中创建范围函数时我有奇怪的行为

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'。

php mysql laravel
1个回答
1
投票

您的查询选择所有连接表(SELECT *)的所有列,因此最后一个id列(unit)将覆盖之前的列(measurementsmeasurement_metas)。

您应该为这种查询使用关系: https://laravel.com/docs/5.6/eloquent-relationships

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

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

User::find($user_id)->load('measurements.metas.unit')
© www.soinside.com 2019 - 2024. All rights reserved.