Сделайте родительский элемент в качестве заголовка группы параметров вместе с дочерними элементами в качестве параметров - Laravel

У меня много красноречивых отношений между Categories->SubCategories->MenuItems. Мне нужно отобразить имя категории в качестве заголовка optgroup и его подкатегории в качестве значения параметра. Вместо моих ожиданий, он показывает категорию над каждой подкатегорией. Извините за то, что я новичок, пожалуйста, помогите мне.

Вот что я сделал до сих пор.

<select wire:model="sub_category_id" class="form-select block w-full mt-1">
    <option>Select Sub Category</option>
    @foreach ($menuitemlist as $menuitem)
        <optgroup label="{{ $menuitem->SubCategories->Categories->category_name }}">
            <option value="{{ $menuitem->SubCategories->id }}">{{ $menuitem->SubCategories->sub_category_name }}</option>
        </optgroup>
    @endforeach
    @error('sub_category_id') <h1 class="text-red-500">{{$message}}</h1>@enderror
</select>

Это результат, который я получаю. введите описание изображения здесь

Редактировать

Вот мои отношения.
Категория Модель

public function SubCategories() {
   return $this->hasMany(SubCategory::class, 'category_id');
}

public function MenuItems() {
    return $this->hasManyThrough(MenuItem::class, SubCategory::class, 'category_id', 'sub_category_id');
}

Подкатегория Модель

public function Categories() {
    return $this->belongsTo(Category::class, 'category_id');
}

public function MenuItems() {
    return $this->hasMany(MenuItem::class, 'sub_category_id');
}

MenuItem Модель

public function SubCategories() {
    return $this->belongsTo(SubCategory::class, 'sub_category_id');
}

person ToxifiedHashkey    schedule 21.10.2020    source источник
comment
Можете добавить отношения?   -  person iamab.in    schedule 21.10.2020
comment
@ iamab.in Я обновил вопрос с отношениями   -  person ToxifiedHashkey    schedule 21.10.2020
comment
как вы запрашиваете $menuitemlist ??   -  person zahid hasan emon    schedule 21.10.2020
comment
@zahidhasanemon Привет, приятель, на самом деле я передаю это представлению с параметрами нумерации страниц и поиска 'menuitemlist' => MenuItem::where('item_name','like', $searchParams)->latest()->paginate(5). Это запрос выше, если вы это имели в виду.   -  person ToxifiedHashkey    schedule 21.10.2020
comment
в этом случае для некоторых меню подкатегория может совпадать. что будет потом ?? вы хотите сделать два или более варианта выбора для одной и той же подкатегории ??   -  person zahid hasan emon    schedule 21.10.2020
comment
Нет, на самом деле я хочу отобразить category_name в качестве метки опции, выбранной с <optgroup> под этим, я хочу отобразить sub_category_name подкатегорий, которые подпадают под ту же категорию. Короче говоря, мне нужно категоризировать подкатегории, принадлежащие к той же категории, и сгруппировать их под category_name, не повторяя его.   -  person ToxifiedHashkey    schedule 21.10.2020
comment
так что это не имеет ничего общего с пунктом меню. Правильно??   -  person zahid hasan emon    schedule 21.10.2020
comment
Давайте продолжим это обсуждение в чате.   -  person ToxifiedHashkey    schedule 21.10.2020


Ответы (1)


вы фактически пытаетесь показать все подкатегории с названием категории в качестве заголовка группы параметров. ваше решение будет отправлять категории из компонента, а затем зацикливать их, чтобы получить подкатегории.

в компоненте

//don't forget to call Category Model
use App\Models\Category;
public function render()
{
    $searchParams = '%'.$this->search.'%';
    $menuitemlist = MenuItem::where('item_name','like', $searchParams)->latest()->paginate(5);
    $categories = Category::with('SubCategories')->get();

    return view('livewire.master-menu.menu-item-list', ['menuitemlist' => $menuitemlist, 'categories' => $categories]);
}

а затем сначала в категориях цикла просмотра, а затем в подкатегориях.

<select wire:model="sub_category_id" class="form-select block w-full mt-1">
    <option>Select Sub Category</option>
    @foreach ($categories as $category)
       <optgroup label="{{ $category->category_name }}">
           @foreach ($category->SubCategories as $sub)
               <option value="{{ $sub->id }}">{{ $sub->sub_category_name }}</option>
           @endforeach
       </optgroup>
    @endforeach
    @error('sub_category_id') <h1 class="text-red-500">{{$message}}</h1>@enderror
</select>
person zahid hasan emon    schedule 21.10.2020
comment
В точку, братан. Именно то, что я хотел и ожидал, большое спасибо. Я в большом долгу перед тобой. :) - person ToxifiedHashkey; 21.10.2020
comment
Привет, Захид, если вы доступны, не могли бы вы взглянуть на этот вопрос stackoverflow.com/q/65874013/13399106, Мне серьезно нужна помощь, Если бы вы могли, я был бы очень признателен. Спасибо за уделенное время :) - person ToxifiedHashkey; 25.01.2021