برای اینکه از دو تیبل واسط استفاده نکنید باید از Polymorphic استفاده کنید و برای بینهایت شدن هم ی چایلد تعریف کنید توی تیبل دسته بندی ها و با استفاده از توابع بازگشتی انجام بدید
سلام دوست من اینی که از چه روابطی استفاده کنی مهم نیست , مهم اینه که بدونی می خوای از روش nested set استفاده کنی برای دسته بندی .یعنی بی نهایت دسته های تو در تو داشته باشی.خب این کار احتیاج به منطق داره.
کمی تحقیق کنید در این رابطه بد نیست
@mehrdadroshanraee69
نکته اینجاست ، شما باید یه رابطه one to many از تیبل کتگوری به خود تیبل کتگوری ایجاد کنید . یک فیلد مثلا به اسم parentid توی تیبل کتگوری اضافه کنید ، توی این فیلد یک دسته پدر برای هر دسته مشخص میکنید ، و پس هر دسته میتونه یک پدر داشته باشه و خودش میتونه پدر چندین دسته دیگه باشه .
میتونی از پکیج 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
موفق باشید
جواب سوال شما تو طرز استفاده از روش داده های سلسله مراتبی هست. در این روش داده ها داخل یک ساختار درختی در رکورد های دیتابیس ذخیره سازی میشن
روش های مختلفی برای کار با داده های سلسله مراتبی هست مثل:
برای پیادهسازی دستهبندی بینهایت (یعنی دستهبندیهایی که میتونن خودشون زیرمجموعه داشته باشن، و اون زیرمجموعهها هم باز میتونن زیرمجموعه داشته باشن و الی آخر)، بهتره از یه رابطه 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 برای بیشتر پروژهها جواب میده و قابل توسعهست.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟