Как вернуть подкатегорию в меню nav menu в laravel - PullRequest
1 голос
/ 14 апреля 2020

Я использовал AppServiceProvider, чтобы он был доступен для всех страниц, и я хочу загрузить все подкатегории в своей категории в меню навигации, теперь он загрузит все категории, а в последней категории он перечислит все подкатегории, которые есть в таблице, пожалуйста, помогите.

вот пример изображения

header.blade. php

 @foreach($shareData['categories'] as $category)
      <li class="dropdown m-menu-fw">
        <a href="#" data-toggle="dropdown" class="dropdown-toggle">{{ $category->name }}
                                <span><i class="fa fa-angle-down"></i></span></a>

                                @endforeach
                                <ul class="dropdown-menu" >
                                    <li>
                                        <div class="m-menu-content" style="text-align: center;">
                                            <ul class="col-sm-12" >
                                                <li class="dropdown-header">{{ $category->name }}</li>
                                                @foreach($shareData['subcategories'] as $subcategory)
                                                <li><a href="#">{{ $subcategory->name }}</a></li>
                                                @endforeach
                                            </ul>



                                        </div>
                                    </li>
                                </ul>
                            </li>

AppServicePrivider. php

 $categories = Category::where('status',1)->get(); 
        $subcategories = Subcategory::where('status',1)->get();
$shareData = array( 
'categories'=>$categories,
'subcategories'=>$subcategories
);

       view()->share('shareData',$shareData);

Категория. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';


    public function posts(){
        return $this->hasMany('App\Post');
    }

    public function subcategory(){
        return $this->hasMany('App\Subcategory');
    }
}


Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Сделайте свой header.blade. php следующим образом:

@foreach($shareData['categories'] as $category)
  <li class="dropdown m-menu-fw">
    <a href="#" data-toggle="dropdown" class="dropdown-toggle">{{ $category->name }}
                            <span><i class="fa fa-angle-down"></i></span></a>


                            <ul class="dropdown-menu" >
                                <li>
                                    <div class="m-menu-content" style="text-align: center;">
                                        <ul class="col-sm-12" >
                                            <li class="dropdown-header">{{ $category->name }}</li>

                                            @foreach($category['subcategory'] as $subcategory)
                                            <li><a href="{{ url('/subcategory') }}/{{ $subcategory->id }}">{{ $subcategory->name }}</a></li>
                                            @endforeach
                                        </ul>



                                    </div>
                                </li>
                            </ul>
                        </li>

@endforeach

Сделайте ваш AppServiceProvider следующим кодом:

$categories = Category::where('status',1)->get(); 

$shareData = array( 
'categories'=>$categories
);

       view()->share('shareData',$shareData);
1 голос
/ 14 апреля 2020

Вы должны использовать with('subcategory') непосредственно в запросе категории:

view()->share('shareData',Category::with('subcategory')->where('status',1)->get());

Тогда ваш блэйд-вид может быть:

@foreach($shareData['categories'] as $category)
    <li class="dropdown m-menu-fw">
        <a href="#" data-toggle="dropdown" class="dropdown-toggle">{{ $category->name }}
            <span><i class="fa fa-angle-down"></i></span></a>

        <ul class="dropdown-menu">
            <li>
                <div class="m-menu-content" style="text-align: center;">
                    <ul class="col-sm-12">
                        <li class="dropdown-header">{{ $category->name }}</li>
                        @foreach($category['subcategory'] as $subcategory)
                            <li><a href="#">{{ $subcategory->name }}</a></li>
                        @endforeach
                    </ul>
                </div>
            </li>
        </ul>
    </li>
@endforeach

Я бы изменил метод отношения с subcategory() до subcategories(), так как это отношение HasMany.

...