как получить одну категорию и ее подкатегории в Laravel Blade - PullRequest
0 голосов
/ 18 мая 2019

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

Например, у меня есть категории обуви и рубашек и их подкатегории в таблице, я хочу отображать только категорию рубашек и ее подкатегории в передней части. пожалуйста, помогите мне достичь этого.

Я получаю все категории и подкатегории из таблицы

Маршрут:

//here i have added route url for link and well to display categories 
Route::get('/products/{url}', 'ProductController@products');

Метод контроллера:

//this is function/method
public function products($url = null)
    {
            $countCategory = Category::where(['url'=>$url, 'status'=>1])->count();
                if($countCategory==0){
                    abort(404);
                }
        //Get All Categories and Sub Categories
       $categories = Category::with('categories')->where(['parent_id' => 0])->get();

       $categoryDetails = Category::where(['url' => $url])->first();
            if ($categoryDetails->parent_id==0) {
                //if url is main category url
                $sub_categories = Category::where(['parent_id'=>$categoryDetails->id])->get();
                    foreach ($sub_categories as  $sub_cat) {
                        $cat_ids[] = $sub_cat->id;
                    }
                    // echo $cat_ids; die;
                    $productsAll = Product::whereIn('category_id',$cat_ids)->where('status', 1)->get();
            } else {
                $productsAll = Product::where(['category_id' => $categoryDetails->id])->where('status', 1)->get();
            }
       return view('products.listing')->with(compact('categories', 'categoryDetails', 'productsAll'));
    }

Категория Модель:

 public function categories()
    {
        return $this->hasMany('App\Category', 'parent_id');
    }

Balde (Просмотр) файл:

<div class="side-bar col-md-12">
    <h3 class="agileits-sear-head">Category</h3>
    <div class="panel-group" id="accordian">
        {{-- this is the basic way to show the categores inthe table --}}
        <?php //echo $categories_menu ?>
            @foreach ($categories as $cat) 
            @if($cat->status=="1")
                <div class="panel-heading" >                                   
                    <h4 class="panel-title">
                        <a href="#{{ $cat->id }}" data-toggle="collapse" data-parent="#accordian">
                            <span class="badge pull-right"><i class="fa fa-plus"></i></span>
                                {{ $cat->name }}
                        </a>
                    </h4>
                </div>
                <div id="{{ $cat->id }}" class="panel-collapse collapse">
                    <div class="panel-body" >
                        <ul style="list-style: none; margin-left:30px;">
                            @foreach ($cat->categories as $sub_cat)
                                @if($sub_cat->status=="1")
                                    <li><a  href="{{ asset('/products/'.$sub_cat->url)  }}" style="color:orange;">{{ $sub_cat->name }}</a></li>
                                @endif
                            @endforeach
                        </ul>
                    </div>
                </div>
            @endif    
            @endforeach        
    </div>
</div>

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

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

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

, пожалуйста, подскажите мне, как этого добиться,

1 Ответ

0 голосов
/ 18 мая 2019

Это очень простое отношение hasMany-ownTo, позвольте мне показать вам.

<?php

namespace App\models;
use App\pivotes\Catagory;

use Illuminate\Database\Eloquent\Model;

class Catagory extends Model
{
    public function children()
    {
        return $this->hasMany(SELF::class, 'parent_id');
    }

    public function parentCategory()
    {
        return $this->hasMany(SELF::class, 'id', 'parent_id');
    }
}

Файл миграции будет

Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('category');
            $table->unsignedInteger('parent_id')->nullable();
            $table->timestamps();

            $table->foreign('parent_id')->references('id')->on('comments');
        });

для /categories/{category}

Контроллерметод будет

CategoryController extends Controller {
    public function show(Category $category)
    {
        return view('categories.show', $category);
    }

}

В поле зрения

@foreach( $category->children as $subCategory )
    {{ $subcategory->category }}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...