سلام. من میخوام تو وبسایت دسته بندی داشته باشم که هر دسته بندی چندتا زیر دسته بندی داره و هر زیردسته بندی هم خودش میتونه چندتا زیردسته بندی دیگه داشته باشه. این زیردسته بندی هم باید دینامیک باشه یعنی تا چند مرحله نامشخص باشه. توی دیتابیس چطور تعریف میشه ؟ یه جدول که هر دسته بندی یه parent_id داشته باشه ؟ یا روش دیگه ای هست ؟
مورد بعد اینکه من میخوام واسه یه محصول تعریف کنم که مربوط به یه زیردسته بندی هست. ولی میخوام وقتی محصولات مربوط به دسته بندی پدر اون زیردسته بندی رو زدم واسه مشاهده، اون محصول مربوط به زیردسته بندی هم نمایش داده بشه.
مثلا فرض کنید دسته بندی کتاب درسی داریم
زیردسته های مدرسه، دانشگاه و ... هم داریم
و واسه دانشگاه مثلا زیردسته های عمومی و تخصصی داریم
و همینطور میتونه این زیردسته بندی ادامه پیدا کنه.
حالا من اگر یه کتاب واسه زیردسته عمومی تعریف کردم میخوام اگر زدم لیست کتب دانشگاهی یا مثلا لیست کتب درسی، این کتاب رو هم نشون بده.
معماری و روش انجام این کار چیه ؟ یه PIVOT TABLEواسه محصولات و دسته بندی ها تعریف کنم که وقتی میخوام محصول رو ثبت کنم بیاد اون محصول رو واسه اون زیردسته بندی و تمام دسته بندی های پدر ثبت کنه ؟ مثلا 3-4 تا رکورد ثبت بشه توی جدول؟ یا روش دیگه ای هست؟
سلام
@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 عالی بود @Arshavir
ممنون
@smartgarden2016
موفق باشی