Laravel 5.7: Красноречивый порядок, связанный с моделью, а также с использованием условия whereHas - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть модель OptionGroup, у которой есть связанная модель Option, у которой, в свою очередь, есть связанная модель Attribute.

Я хотел бы получить все группы OptionG с их опциями, гдеОпция имеет определенный атрибут (product_id), а затем упорядочивает все другое значение (default) в модели атрибутов.

В моем контроллере:

$optionGroups = OptionGroup::with(['options' => function($query) use ($product) {
            $query->whereHas('attributes', function($q) use ($product) {
                $q->where('product_id', $product->id);

                // Ideally here:
                // $q->orderBy('default', 'desc');
            });
        }])
        ->orderBy('sort_order', 'desc')
        ->get();

Я пробовалразличные красноречивые возможности, чтобы попытаться применить orderBy() на модели, но безуспешно.

Спасибо.

1 Ответ

0 голосов
/ 04 декабря 2018

Следующий запрос даст вам все OptionGroups, у которых есть хотя бы один Option с Attribute, принадлежащим данному продукту (определяется product_id).Тогда запрос также только egaer загрузит все Options и их Attributes с заданным product_id.Но сортировка по дочерним отношениям невозможна из-за неоднозначности:

$optionGroups = OptionGroup::query()
    ->whereHas('options.attribute' => function ($query) use ($product) {
        $query->where('product_id', $product->id);
    })
    ->with(['options.attribute' => function ($query) use ($product) {
        $query->where('product_id', $product->id);
    }])
    ->get();
...