【问题标题】:Make parent as the option group header along with the children as the options - Laravel将父级作为选项组标题,将子级作为选项 - Laravel
【发布时间】:2021-02-04 10:18:59
【问题描述】:

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');
}

菜单项模型

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

【问题讨论】:

  • 可以添加关系吗?
  • @iamab.in 我已经用关系更新了问题
  • 你如何查询得到$menuitemlist??
  • @zahidhasanemon 嘿伙计,实际上我将它传递给带有分页和搜索参数'menuitemlist' =&gt; MenuItem::where('item_name','like', $searchParams)-&gt;latest()-&gt;paginate(5) 的视图。这是上面的查询,如果你的意思是这样的话。
  • 在这种情况下,某些菜单的子类别可能相同。那会发生什么?您想为同一子类别制作两个或更多选择选项吗??

标签: php laravel laravel-8


【解决方案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>

【讨论】:

  • 说到重点,兄弟。正是我想要和期待的,非常感谢。我欠你很多时间。 :)
  • 嘿扎希德,如果你有空,请看一下这个问题stackoverflow.com/q/65874013/13399106,我非常需要帮助,如果可以,我将不胜感激。谢谢你的时间:)
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2015-10-20
  • 1970-01-01
相关资源
最近更新 更多