مهرداد
5 سال پیش توسط مهرداد مطرح شد
6 پاسخ

دسته بندی بی نهایت

دوستان لاراولی لطفا راهنماییم کنید برای ایجاد دسته بندی بی نهایت برای مقالات و دوره های اموزشی باید از روابط many to many باید استفاده کنم یا Polymorphic


ثبت پرسش جدید
Reza Amini
تخصص : PHP/Laravel
@rezi 5 سال پیش مطرح شد
-1

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


hasan afshar
@n.13ruffsmasher 5 سال پیش مطرح شد
0

سلام دوست من اینی که از چه روابطی استفاده کنی مهم نیست , مهم اینه که بدونی می خوای از روش nested set استفاده کنی برای دسته بندی .یعنی بی نهایت دسته های تو در تو داشته باشی.خب این کار احتیاج به منطق داره.
کمی تحقیق کنید در این رابطه بد نیست


وحید
تخصص : Fullstack
@forughi.vahid 5 سال پیش آپدیت شد
0

@mehrdadroshanraee69
نکته اینجاست ، شما باید یه رابطه one to many از تیبل کتگوری به خود تیبل کتگوری ایجاد کنید . یک فیلد مثلا به اسم parentid توی تیبل کتگوری اضافه کنید ، توی این فیلد یک دسته پدر برای هر دسته مشخص میکنید ، و پس هر دسته میتونه یک پدر داشته باشه و خودش میتونه پدر چندین دسته دیگه باشه .

  • با توجه به نیازتون ارتباط دسته ها با مقالات میتونه هر چیزی باشه.
  • اگر هم مقالات و هم ویدیو آموزشی دسته بندی دارند از نظر سادگی بهترین انتخاب polymorphic one to many هست.

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

میتونی از پکیج Laravel-Categorizable استفاده کنی.
https://github.com/AliBayat/Laravel-Categorizable

با روابط چندریختی، این پکیج میتونه هر مدل الکوئنت رو دسته بندی کنه...
و برای ساخت دسته بندی ها هم هیچ محدودیتی نداره
میتونی تا هر چند مرحله که خواستی، پیش بری

امکانات مدیریت دسته بندی ها:

یک سری متدها برای بررسی روابط بین دسته ها داره:

    $category->isChildOf($other);
    $category->isAncestorOf($other);
    $category->isSiblingOf($other);
    $category->isLeaf()

به همراه اسکوپ‌های مختلف مثل:

$result = Category::ancestorsOf($id);
$result = Category::ancestorsAndSelf($id);
$result = Category::descendantsOf($id);
$result = Category::descendantsAndSelf($id);

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

    Category belongs to parent
    Category has many children
    Category has many ancestors
    Category has many descendants

سایر امکانات

متدهای کاربردی برای ضمیمه کردن دسته بندی به یک مدل و حذف و غیره... در ریپازیتوری گیت‌هاب + در گفتگوی زیر موجوده:
https://roocket.ir/discuss/6117

موفق باشید


hasan afshar
@n.13ruffsmasher 2 سال پیش مطرح شد
0

جواب سوال شما تو طرز استفاده از روش داده های سلسله مراتبی هست. در این روش داده ها داخل یک ساختار درختی در رکورد های دیتابیس ذخیره سازی میشن
روش های مختلفی برای کار با داده های سلسله مراتبی هست مثل:

  • Adjacency List
  • Nested Sets
    بنده روش nested sets رو پیشنهاد میکنم

محمدطاهر غلامی
تخصص : برنامه نویس وب
@MohammadTaher.GH 2 هفته پیش مطرح شد
1

برای پیاده‌سازی دسته‌بندی بی‌نهایت (یعنی دسته‌بندی‌هایی که می‌تونن خودشون زیرمجموعه داشته باشن، و اون زیرمجموعه‌ها هم باز می‌تونن زیرمجموعه داشته باشن و الی آخر)، بهتره از یه رابطه self-referencing استفاده بشه، نه many-to-many و نه polymorphic.

many-to-many بیشتر زمانی کاربرد داره که یه مدل (مثلاً یه مقاله یا دوره) بتونه به چندتا دسته وصل بشه، و اون دسته‌ها هم مستقل از هم باشن.
Polymorphic هم معمولاً برای وقتیه که مدل‌هایی مثل عکس یا کامنت یا تگ می‌خوای به چند مدل مختلف وصل بشن.

ولی وقتی صحبت از ساختار درختی می‌شه، مثل دسته‌بندی بی‌نهایت، منطقی‌ترین راه اینه که یه جدول دسته‌بندی داشته باشیم و هر دسته یه فیلد parent_id داشته باشه که به خودش اشاره کنه.
ساخت جدول:

Schema::create('categories', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->foreignId('parent_id')->nullable()->constrained('categories')->nullOnDelete();
    $table->timestamps();
});

مدل Category:

class Category extends Model
{
    use HasFactory;

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

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

استفاده:

$category = Category::find(1);
$children = $category->children;
$parent = $category->parent;

اگه بخوای ساختار درختی رو به شکل بازگشتی نمایش بدی، یا مثلاً همه زیردسته‌ها رو با یه درخواست بگیری، می‌تونی از پکیج‌هایی مثل Kalnoy/Nestedset استفاده کنی که این کارو خیلی راحت‌تر می‌کنن.

اما اگه قصد داری همه‌چیز رو خودت مدیریت کنی و کنترل کامل دستت باشه، همین ساختار ساده با parent_id برای بیشتر پروژه‌ها جواب می‌ده و قابل توسعه‌ست.


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

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