سلام. من میخوام تو وبسایت دسته بندی داشته باشم که هر دسته بندی چندتا زیر دسته بندی داره و هر زیردسته بندی هم خودش میتونه چندتا زیردسته بندی دیگه داشته باشه. این زیردسته بندی هم باید دینامیک باشه یعنی تا چند مرحله نامشخص باشه. توی دیتابیس چطور تعریف میشه ؟ یه جدول که هر دسته بندی یه parent_id داشته باشه ؟ یا روش دیگه ای هست ؟
مورد بعد اینکه من میخوام واسه یه محصول تعریف کنم که مربوط به یه زیردسته بندی هست. ولی میخوام وقتی محصولات مربوط به دسته بندی پدر اون زیردسته بندی رو زدم واسه مشاهده، اون محصول مربوط به زیردسته بندی هم نمایش داده بشه.
مثلا فرض کنید دسته بندی کتاب درسی داریم
زیردسته های مدرسه، دانشگاه و ... هم داریم
و واسه دانشگاه مثلا زیردسته های عمومی و تخصصی داریم
و همینطور میتونه این زیردسته بندی ادامه پیدا کنه.
حالا من اگر یه کتاب واسه زیردسته عمومی تعریف کردم میخوام اگر زدم لیست کتب دانشگاهی یا مثلا لیست کتب درسی، این کتاب رو هم نشون بده.
معماری و روش انجام این کار چیه ؟ یه PIVOT TABLEواسه محصولات و دسته بندی ها تعریف کنم که وقتی میخوام محصول رو ثبت کنم بیاد اون محصول رو واسه اون زیردسته بندی و تمام دسته بندی های پدر ثبت کنه ؟ مثلا 3-4 تا رکورد ثبت بشه توی جدول؟ یا روش دیگه ای هست؟
داخل مدل به صورت زیر باشئ
public function parent()
{
return $this->belongsTo(Menu::class, 'parent_id');
}
public function children()
{
return $this->hasMany(Menu::class, 'parent_id');
}
سلام میتونید فیلد های زیر رو داشته باشید
id
name
parent_id
published_at
created_at
updated_at
فیلد parent_id به دسته بندی والد خودش اشاره میکنه و میتونید حالت های تودرتو داشته باشید. پیاده سازیش خیلی راحته.
داخل مدل به صورت زیر باشئ
public function parent()
{
return $this->belongsTo(Menu::class, 'parent_id');
}
public function children()
{
return $this->hasMany(Menu::class, 'parent_id');
}
سلام
@smartgarden2016
این مطلب رو بخونید
https://roocket.ir/discuss/1856
کمکتون خواهد کرد!
ممنون دوستان. من مشکل اصلیم مربوط به حالتی بود که تا چندین مرحله زیردسته وجود داشته باشه. تا یه مرحله رو مشکلی نداشتم. که البته با eager loading و پاسخ دومی که دوستان دادن تونستم تا حدی مشکل رو حل کنم.
اینم به صورت کامل
به صورت بهینه میشه چیزی به صورت زیر
مدل
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
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟