Данные GPS, которые я импортирую, могут иметь несколько точек маршрута для одного и того же места.
Я сохраняю эти данные GPS в базе данных, но хочу обработать все дубликаты как один.
My Laravel ( v6) Модель Place имеет id
и parent_id
(я мог бы изменить это при необходимости). Например,
id parent_id name
1 null real place
2 1 same as real place
При запросе информации о месте, я всегда хотел бы сделать это для реального места и дубликатов. Пока я использую локальную область видимости:
public function scopeId($query, $id) {
return $query->where('id', $id)->orWhere('parent_id', $id);
}
Это позволяет мне делать, например, Place::id(1)->with('visits')->get()
, что дает мне, например,
place 1
- visit A
- visit B
place 2
- visit C
Есть ли способ "объединить" эти места чтобы ответы всегда возвращали только родительское место? Например:
place 1
- visit A
- visit B
- visit C
with('visits')
является примером. Хотелось бы, чтобы эта функция применялась ко всем запросам, связанным с Place.
Редактировать: полный пример
Place::id(1078)->select('id','parent_id')->with('visits:id,place_id')->get()
=> Illuminate\Database\Eloquent\Collection {#3092
all: [
App\Place {#3115
id: 1068,
parent_id: 1078,
visits: Illuminate\Database\Eloquent\Collection {#3109
all: [
App\Timeline {#3087
id: 8022,
place_id: 1068,
},
App\Timeline {#3094
id: 8023,
place_id: 1068,
},
],
},
},
App\Place {#3137
id: 1078,
parent_id: null,
visits: Illuminate\Database\Eloquent\Collection {#3139
all: [
App\Timeline {#3117
id: 8304,
place_id: 1078,
},
App\Timeline {#3084
id: 8401,
place_id: 1078,
},
App\Timeline {#3116
id: 8513,
place_id: 1078,
},
App\Timeline {#3119
id: 9363,
place_id: 1078,
},
],
},
},
],
}