سلام
دوستان من یه فرم صدور فاکتور پیاده سازی کردم که مشخصات محصول رو بصورت آرایه میگیره و ارسال میکنه به کنترلر (تصویر زیر)
الان وقتی میخوام تو دیتابیس ذخیره کنم خطا میده که آرایه قابل تبدیل به String نیست!
میخوام کل این موارد رو درون یک ردیف ذخیره کنم و مثلا فیلد item_name اینجوری ذخیره بشه [1,2,3] بهترین راه برای اینکار چیه ؟؟
پ.ن: درضمن اگه روشی برای تبدیل اعداد تاریخ از فارسی به انگلیسی سراغ دارید بگید لطفا (من از پکیج ورتا استفاده میکنم)
این کار پیشنهاد نمیشه کلا ولی اینجوری به هر حال میتونید مشکلتون رو حل کنید:
باید ارایه رو srialize کنید و بعد توی دیتابیس ذخیره کنید:
$serializedArr = serialize($arr);
و برای گرفتن دوباره از دیتابیس و نمایش دادنش:
$record = SomeModel::find(1);
unserialize($record->field_name);
@d373l0p3r درود
موقع ذخیره سازی با json_encode کار کنید
$model = new Model();
$model->column_name = json_encode($arrData);
و در کنترلر این رو اضافه کنید:
protected $casts = ['column_name' => 'array',];
@miladparsi1070 ممنون از پاسختون. پیشنهاد خودتون برای ذخیره محصولات فاکتور در دیتابیس چه روشی هستش؟
@abedim910 تشکر از پاسختون
این مورد رو متوجه نشدم کارش چیه؟
protected $casts = ['column_name' => 'array',];
@d373l0p3r
فاکتور هر محصول رو توی یک رکورد توی جدول ذخیره کنید
الان عکسی که دادید برای 3 تا محصوله درسته؟
هرکدوم رو جدا توی جدول ذخیره کنید و 6 تا فیلد جدول رو برای هرکدوم مقداردهی کنید
اینطوری دسترسی بهشون هم راحتتره
@d373l0p3r زمانی که مدل رو فراخونی میکنید نیاز نیست json_decode انجام بدید و خودش array بر میگردونه.
$model = Model::find(1);
if(is_array($model->column_name))
echo 'TRUE'
برای تبدیل اعداد انگلیسی به فارسی و برعکس هم فانکشن زیر رو استفاده کنید.
public function convertNumbers($srting, $toPersian = false)
{
$en_num = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$fa_num = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
if ($toPersian) return str_replace($en_num, $fa_num, $srting);
else return str_replace($fa_num, $en_num, $srting);
}
فاکتور هر محصول رو توی یک رکورد توی جدول ذخیره کنید
الان عکسی که دادید برای ۳ تا محصوله درسته؟
هرکدوم رو جدا توی جدول ذخیره کنید و ۶ تا فیلد جدول رو برای هرکدوم مقداردهی کنید
اینطوری دسترسی بهشون هم راحتتره
برای اینکار باید عمل insert رو درون foreach قرار بدم. در لاراول هم همچین چیزی هستش یا متد خاصی داره ؟
کد های فانکشن store بنده :
$insert = Sale::insertGetId([
'person_id' => $request['person'],
'title' => $request['title'],
'salesman_id' => $request['salesman'],
'sale_date' => $sale_date,
'remaining_date' => $remaining_date
]);
SaleItems::insert([
'sale_id' => $insert,
'item_name' => json_encode($request['item_name']),
'order_item_quantity' => json_encode($request['order_item_quantity']),
'order_item_price' => json_encode($request['order_item_price']),
'order_item_final_amount' => json_encode($request['order_item_final_amount'])
]);```
@d373l0p3r عزیز price رو هیچوقت از request نگیر به راحتی قابل تغییر هست. ID رو پاس بده و با ID به قیمت دسترسی پیدا کن
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟