یه برنامه نویس معمولی لینوکس کار
ایجاد اکسترافیلد در لاراول
بنا به درخواست بسیار مهمی که از من شد ، تصمیم گرفتم اکسترافیلد ها رو در لاراول توضیح بدم .
اول از همه ببینیم که
اکسترافیلد چیست ؟
اتفاق افتاده که شما داخل یک سایت مثل آمازون ( نسخه ایرانیشم هست و ادعا میکنن استارت آپه ) دارید خرید میکنید و کالای خودتون رو پیدا کردید . حالا میخواین ببینید مشخصات کالا چیه . اون پایین یه تب هست به اسم مشخصات فنی ، به همین میگیم اکسترافیلد . و السلام .
ساختار کلی اکسترافیلدها :
اکسترافیلد یک ساختار کلی داره و بهتره این شکلی رعایت بشه :
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 = 1
p_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');}
اگر خوب بود یک فنجون قهوه مهمونم کنین . حرف زیاده برای گفتن
مطلبی دیگر از این انتشارات
بخشی از سیستم تست در لاراول به صورت ساده
مطلبی دیگر از این انتشارات
روش استفاده از لاراول میکس در پروژه های غیر لاراولی
مطلبی دیگر از این انتشارات
ورودی از کاربر در لاراول