@EVOSandru6

Как в laravel eloquent сделать выборку аттрибутов с удалением дубликатов от потомка к предку?

Добрый день

Есть некие объявления, к которым привязаны аттрибуты.
Аттрибуты в свою очередь привязаны к услугам.

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, то у потомка не искать.
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы