Добрый день
Есть некие объявления, к которым привязаны аттрибуты.
Аттрибуты в свою очередь привязаны к услугам.
adverts (модель Advert)
--
id
service_id
services (модель Service)
--
id
parent_id
_lft
_rgt
attributes (модель Attribute)
--
attribute_category_id
service_id
advert_id
name
Моя задача - вытащить аттрибуты для объявления таким образом, чтобы
для аттрибутов с одинаковым
attribute_category_id брались те, у которых
service_id максимален (ссылка на услугу с максимальным
parent_id )
Например - есть услуги:
0)
- Спецоборудование ( аттрибуты:
вес(1),
длина(2),
ширина(3),
высота(4) )
- - Дочь спецоборудования (аттрибуты:
устойчивость(5) ,
мощность(6))
- - - Внук спецоборудования (аттрибуты:
устойчивость(7),
высота(8))
Т.е. Если я запрашиваю аттрибуты для объявления, привязанного к услуге
Внук спецоборудования, то должен получить:
устойчивость(7),
высота(8),
мощность(6),
вес(1),
длина(2),
ширина(3)
Пробовал брать таким образом:
1) Сперва относительно
service_id объявления получаю список айдишников услуг потомков и добавляю текущий
$ids = $this->ancestors()
->orderBy('_lft')
->pluck('id')
->merge($this->id)
->toArray();
2) Далее вытаскиваю все привязанные к этим услугам аттрибуты
$parentAttributes = Attribute::whereHas('services', function ($q) use ($ids) {
$q->whereIn('services.id', $ids);
})->get();
Но мне нужно получить как в примере 0) и как-то впендюрить в
eloquent запрос поле
attribute_category_id и получить
Аттрибуты от потомка к предку. Если у потомка есть аттрибут с таким
attribute_category_id, то у потомка не искать.