راکت
حل شده

ساختار دیتابیس در طراحی دسته بندی همراه با زیردسته بندی

7 پاسخ

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

مورد بعد اینکه من میخوام واسه یه محصول تعریف کنم که مربوط به یه زیردسته بندی هست. ولی میخوام وقتی محصولات مربوط به دسته بندی پدر اون زیردسته بندی رو زدم واسه مشاهده، اون محصول مربوط به زیردسته بندی هم نمایش داده بشه.

مثلا فرض کنید دسته بندی کتاب درسی داریم
زیردسته های مدرسه، دانشگاه و ... هم داریم
و واسه دانشگاه مثلا زیردسته های عمومی و تخصصی داریم
و همینطور میتونه این زیردسته بندی ادامه پیدا کنه.
حالا من اگر یه کتاب واسه زیردسته عمومی تعریف کردم میخوام اگر زدم لیست کتب دانشگاهی یا مثلا لیست کتب درسی، این کتاب رو هم نشون بده.

معماری و روش انجام این کار چیه ؟ یه PIVOT TABLEواسه محصولات و دسته بندی ها تعریف کنم که وقتی میخوام محصول رو ثبت کنم بیاد اون محصول رو واسه اون زیردسته بندی و تمام دسته بندی های پدر ثبت کنه ؟ مثلا 3-4 تا رکورد ثبت بشه توی جدول؟ یا روش دیگه ای هست؟

@hesammousavi
@ali.bayat

ثبت پرسش جدید

پاسخ‌ها

7
bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

بهترین پاسخ

داخل مدل به صورت زیر باشئ

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

    }

    public function children()
    {
        return $this->hasMany(Menu::class, 'parent_id');
    }
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

id
name
parent_id
published_at
created_at
updated_at

فیلد parent_id به دسته بندی والد خودش اشاره میکنه و میتونید حالت های تودرتو داشته باشید. پیاده سازیش خیلی راحته.

Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@smartgarden2016

این مطلب رو بخونید
https://roocket.ir/discuss/1856
کمکتون خواهد کرد!

شاید پاسخ شما همین‌جا باشد

smart
smart
@smartgarden2016

ممنون دوستان. من مشکل اصلیم مربوط به حالتی بود که تا چندین مرحله زیردسته وجود داشته باشه. تا یه مرحله رو مشکلی نداشتم. که البته با eager loading و پاسخ دومی که دوستان دادن تونستم تا حدی مشکل رو حل کنم.

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

اینم به صورت کامل
به صورت بهینه میشه چیزی به صورت زیر
مدل

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
   protected $fillable = ['name'];

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

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

کنترلر

   public function index()
   {
       $categories = Category::with('children')->whereNull('parent_id')->get();
       return view('categories.index', compact('categories'));
   }

view

@each('partials._category', $categories, 'category', 'partials._empty-categories')

sub-view

<li>{{ $category->name }}</li>
@if ($category->children->count() > 0)
   <ul>
       @foreach($category->children as $child)
           @include('partials._category', ['category' => $child])
       @endforeach
   </ul>
@endif 
smart
smart
@smartgarden2016

عالی بود @Arshavir
ممنون

bardia
bardia
@mrbardia72

تخصص: Golang/Laravel

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

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