Reputation: 1130
I got strange behavior when creating scope function inside model
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;
}
}
I have 3 tables like this: measurements
What happen $measurements
return id
as unit_id
not measurements.id
What I am doing wrong?
Clarifying: All I want is the 'id' become = 'measurements.id' not 'units.id', but since the 'units.id' come last it appear as the 'id'.
Upvotes: 0
Views: 73
Reputation: 25906
Your query selects all columns of all joined tables (SELECT *
), so the last id
column (unit
) overwrites the previous ones (measurements
, measurement_metas
).
You should use relationships for this kind of queries:
https://laravel.com/docs/5.6/eloquent-relationships
For example:
User → HasMany
→ Measurement
Measurement → HasMany
→ Measurement_Meta
Measurement_Meta → BelongsTo
→ Unit
Then use eager loading to load them all at once:
User::find($user_id)->load('measurements.metas.unit')
Upvotes: 1