مدل دسته بندی و مدل محصولات

با سلام خدمت دوستان

من دارم یک فروشگاه طراحی میکنم که یک مدل دسته بندی داره ( category ) و یک مدل product و مدل های دیگه مثل مقالات و دوره ها

من بجای اینکه برای مقاله ها - دوره ها - محصولات جداگانه بیام برای هر کدام یک جدول دسته بندی طراحی کنم از یکی برای همه استفاده کردم.

یعنی از جدول واسط استفاده کردم برای اینکار. جداول من
category
product
article
course
category_product
article_category
category_course

حالا سوال من اینجاست که :
من میخوام هم کار به ساخت جداول جدا نشه (1)
هم یک دسته بندی بتونه به تعداد نا معلوم زیر بخش ( فرزند ) داشته باشه (2)

و مشکلایی که بهش خوردم اینهاست :

وقتی تو خود جدول محصولات میام یک فیلد به عنوان category_id اضافه میکنم دیگه نمیشه به یک محصول چند تا دسته بندی اضافه کرد
برای همین رفتم سراغ جدول واسط

اومدم ازmorphy استفاده کردم که یک دسته بندی فرزند داشته باشه اما نتونستم تکمیلش کنم و درکش نکردم

الان که از جدول واسط استفاده میکنم مشکلم اینه نمیدونم چجوری وقعی که منو دسته بندی هامو میخوم نشون بدم با چه پرسمانی و روشی یک ارایه برگردونم که توش ارایه تو در تویی از دسته بندی ها به همراه زیر بخش هاش باشه چون نمیتونم تابع بازشگتی استفاده کنم تو لایه نمایش

مشکل بعدی اینه که وقتی میخوام محصولات مشابه و نشون بدم ممکنه یک محصول چند تا دسته بندی دشته باشه
میخوام کدی بنویسم که بتونه اول لیست همه دسته بندی های محصول و در بیاره و بعد محصولاتی که تو اون دسته بندی ها هست و با توجه به اینکه چقدر فروش داشتند یا بازدید خوردند یا دلایل دیگه برگردونه

@hesammousavi
@ali.bayat


ثبت پرسش جدید
الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 5 سال پیش مطرح شد
0
Mohammad Amin Mokhtari
تخصص : برنامه نویس
@amin.mokhtari94 5 سال پیش مطرح شد
0

سلام
رابطه پولی مورفیک زیر بهتون کمک میکنه:

class Category extends Model
{

    public function parent()
    {
        return $this->belongsTo(static::class, 'parent_id','id');
    }

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

    public function articles()
    {
        return $this->morphedByMany('App\Article', 'categorible');
    }

    public function products()
    {
        return $this->morphedByMany('App\Product', 'categorible');
    }
}

class Article extends Model
{
    /**
     * دریافت تمامی دسته های مقاله.
     */
    public function categories()
    {
        return $this->morphToMany('App\Category', 'categorible');
    }
}

class Product extends Model
{
    /**
     * دریافت تمامی دسته های محصول.
     */
    public function categories()
    {
        return $this->morphToMany('App\Category', 'categorible');
    }
}

توجه کنید که باید فیلد های زیر رو در دیتابیس مدل Category ایجاد کنید.

categoris
    id - integer
    title - string
    parent_id - integer
    categorible_id - integer
    categorible_type - string

به عنوان مثال برای نمایش دسته بندی های یک محصول میتوان از کد زیر استفاده کرد:

echo '<ul>';
foreach($product->categories() as $cat){
    echo '<li>';
    echo $cat->title; //name of category
    echo '</li>';
}
echo '</ul>';

در نهایت برای نمایش تمامی دسته ها یک فایل blade ایجاد کرده:

# category-items.blade.php

@foreach($categories as $c)
    </li>
        <a href="{{route('categories.show',[$c])}}">{{$c->title}}</a>
        <ul>
        @if(count($c->children))
            @include('category-items',['categories' => $c->children])
        @endif
        </ul>
    <li>
@endforeach

حالا این فایل را در ویویی که میخواهیم لیست در آن نمایش داده شود فراخوانی میکنیم:

# index.blade.php
# ...

<ul>
@include('category-items',['categories' => \Category::all()])
</ul>

# ...

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

بنده اخیرا پکیجی به نام Laravel Categorizable منتشر کردم. این پکیج کاملا با نسخه ۶ و ۷ لاراول سازگار است و با بهره گیری از روابط چندریختی (Polymorphism) این امکان را به ما می‌دهد که: هر مدلی که خواستیم را دسته بندی کنیم. به عبارت دیگر در یک اپلیکیشن لاراولی می‌توانیم پست‌ها، محصولات، ویدیو‌ها و هر تعداد مدل دیگر که نیاز داریم را براحتی دسته بندی‌ کنیم;
با این پکیج همچنین ساخت، به روزرسانی و حذف دسته بندی‌های ساده و تودرتو به راحتی قابل انجام است.

تنها کافیست از تریت پکیح در مدل مورد نظر استفاده کنیم:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use AliBayat\LaravelCategorizable\Categorizable;

class Post extends Model
{
    use Categorizable;

}

مراحل کامل نصب و استفاده در گفتگوی زیر و ریپوی گیت موجوده:
https://roocket.ir/discuss/6117
https://github.com/AliBayat/Laravel-Categorizable


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام