ایجاد اکسترافیلد در لاراول

بنا به درخواست بسیار مهمی که از من شد ، تصمیم گرفتم اکسترافیلد ها رو در لاراول توضیح بدم . اول از همه ببینیم که اکسترافیلد چیست ؟اتفاق افتاده که شما داخل یک سایت مثل آمازون ( نسخه ایرانیشم هست و ادعا میکنن استارت آپه ) دارید خرید میکنید و کالای خودتون رو پیدا کردید . حالا میخواین ببینید مشخصات کالا چیه . اون پایین یه تب هست به اسم مشخصات فنی ، به همین میگیم اکسترافیلد . و السلام . ساختار کلی اکسترافیلدها :اکسترافیلد یک ساختار کلی داره و بهتره این شکلی رعایت بشه :1- هر دسته بندی دارای یک سری اسکترافیلد هست . چرا؟فرض کنید من دسته بندی لوازم خانگی دارم و داخل اون دسته بندی جارو برقی . حالا مشخصات کلی همه جارو برقی ها در یک گروه قرار میگیرند . هیچ جارو برقی نداریم که هارد اکسترنال داشته باشه . پس هر دسته بندی باید یک گروه اکسترا فیلد داشته باشه . پس یک جدول میخوام برای ارتباط اکسترافیلد به گروه.2- هر اکسترافیلد باید مقدار مرتبط با آی دی خودش رو بگیره . من میام داخل دسته بندی جارو برقی ، یک گروه اکسترافیلد ایجاد میکنم که مسلما آی دی خاص خودشون رو دارن و تکراری هم نیست . زمانی که کالای خودم رو وارد میکنم ، متناسب با آی دی کالای خودم ، به آی دی های اکسترافیلد ، مقدار میدم . پس یک جدول میخوام برای ارتباط کالا به اکسترافیلد . 3 - مسلما ما باید یک رابطه بین کالا و دسته بندی هم داشته باشیم . پس یک دیتابیس هم برای این کالا و دسته بندی ایجاد میکنیم . به طور کلی الان ما جداول زیر رو داریم : products , categories , extrafields , extrafield_values جدول کالا و دسته بندی رو فرض میکنم که به طور مناسب طراحی کردید . و داخل کالا یک ستون برای دسته بندی درست کردین . باید ساختار اکسترافیلد رو درست کنیم . خروجی جدول extrafields : +------------+------------------+------+-----+---------+----------------+ |id|int(10)unsigned|NO|PRI|NULL|auto_increment| |name|varchar(191)|NO||NULL|| |c_id|int(11)|NO||NULL|| |created_at|timestamp|YES||NULL|| |updated_at|timestamp|YES||NULL|| +------------+------------------+------+-----+---------+----------------+ و خروجی جدول extrafields_value +------------+------------------+------+-----+---------+----------------+ |Field|Type|Null|Key|Default|Extra| |id|int(10)unsigned|NO|PRI|NULL|auto_increment| |e_id|varchar(191)|NO||NULL|| |value|int(11)|NO||NULL|| |p_id|int(11)|NO||NULL|| |created_at|timestamp|YES||NULL|| |updated_at|timestamp|YES||NULL|| +------------+------------------+------+-----+---------+----------------+ مرحله ای که من میخوام در موردش صحبت کنم نحوه نوشتن Model برای گرفتن اطلاعات اکسترافیلده . من توی کنترلر دریافت یک کالای خاص میام و اینجوری مینویسم : $getExtrafields=$this->extrfafieldsValues->where(['p_id'=>$id])->get();$this->extrfafieldsValues میشه مدل مربوط به مقادیر اکستارفیلد که داخل construct نوشتم . اول از همه ما باید کل اکسترافیلدهای مربوط به کالا رو بگیریم . ما الان مقادیر هر اکسترافیلد رو داریم . وقتشه که بریم توی Blade . اونجا باید اسم هر اکسترافیلد هم بگیریم . مثلا چیزی که الان ما داریم به این صورته که برای یک تلویزیون مقادیر زیر اومده :‌p_id = 1 , value = 43" , e_id = 1p_id = 1 , value = مشکی , e_id= 2 خوب معلومه که مقدار هر اکسترافیلد چیه . اما e_id که برابر 1 هست رو نمیدونم اسمش چیه . حدس میزنیم با توجه به مقدارش ، سایز صفحه نمایشه . اما باید به کاربر نمایش بدیم . پس میریم توی blade و قسمتی که foreach میزنیم تا تمام مقادیر رو نمایش بدیم . @foreach($extrafieldsas as $item) <div class="col"> {{$item->getName->name}} </div> <div class="col"> {{$item->value}} </div>@endforeachحالا داخل این قسمت باید تابع getName رو داخل مدل extrafield_value به این شکل بسازم و تمام . publicfunctiongetName(){return$this->belongsTo('App\ExtraFields','id','e_id');} publicfunctiongetName(){return$this->belongsTo('App\ExtraFields','id','e_id');} Laravel BelongsToاگر خوب بود یک فنجون قهوه مهمونم کنین . حرف زیاده برای گفتن