سلام
میشه توی لاراول،یک موجودیت زیر مجموعه یک موجودیت دیگه باشه و از طرفی خودش زیر مجموعه داشته باشه
مثلا یک کتگوری ،چند تا زیر کتگوری داشته باشه و هر زیرکتگوری، چند تا پست داشته باشه
من اینو پیاده سازی کردم ولی ارور میده
Products.php:
<?php
namespace App\Models;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillable=['title','content','image','mymodel_id','warehouse_id',];
public function deleteImage(){
Storage::delete($this->image);
}
//blongs to a -model- and -warehouse-
public function warehouse(){
return $this->belongsTo(Warehouse::class);
}
public function mymodel(){
return $this->belongsTo(MyModel::class);
}
}
Category.php:
<?php
namespace App\Models;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
protected $fillable=['name','description','image'];
//has many models
public function mymodels(){
return $this->hasMany(MyModel::class);
}
public function deleteImage(){
Storage::delete($this->image);
}
}
MyModel.php:
<?php
namespace App\Models;
use Illuminate\Support\Facades\Storage;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
use HasFactory;
protected $fillable=['name','description','image','category_id'];
public function deleteImage(){
Storage::delete($this->image);
}
public function category(){
return $this->belongsTo(Category::class);
}
public function products(){
return $this->hasMany(Product::class);
}
}
داخل مدل دسته بندی هات اینو بنویس
public function child()
{
return $this->hasMany(Pcategory::class, 'parent', 'id');
}
public function products()
{
return $this->belongsToMany(Product::class);
}
روابط اینطوری بنویس بی نهایت فرزند برای فرزند و برای فرزند میتونی تعریف کنی
ولی باید در دیتا بیس برای هر کتگوری یک ستون parent قرار بردی
بله مشکلی نیست.
برای دسته بندی ها و زیردسته هاشون فقط یک جدول لازم هست. و کافیست یک فیلد به اسم مثلا parent تعریف کنی در جدول که برای دسته بندی های والد مقدار صفر بگیر و برای فرزندان آیدی والدش رو دریافت کنه. و بعد در مدل مربوط به دسته بندی ارتباط یک به چند برای دسته و زیردسته بنویسی.
public function child()
{
return $this->hasMany(Category::class,'parent','id');
}شاید پاسخ شما همینجا باشد