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