علیرضا فرهادی
4 سال پیش توسط علیرضا فرهادی مطرح شد
10 پاسخ

ذخیره اقلام فاکتور بصورت آرایه

سلام
دوستان من یه فرم صدور فاکتور پیاده سازی کردم که مشخصات محصول رو بصورت آرایه میگیره و ارسال میکنه به کنترلر (تصویر زیر)
توضیح تصویر رو وارد کنید
الان وقتی میخوام تو دیتابیس ذخیره کنم خطا میده که آرایه قابل تبدیل به String نیست!
میخوام کل این موارد رو درون یک ردیف ذخیره کنم و مثلا فیلد item_name اینجوری ذخیره بشه [1,2,3] بهترین راه برای اینکار چیه ؟؟

پ.ن: درضمن اگه روشی برای تبدیل اعداد تاریخ از فارسی به انگلیسی سراغ دارید بگید لطفا (من از پکیج ورتا استفاده میکنم)


ثبت پرسش جدید
میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
1

این کار پیشنهاد نمیشه کلا ولی اینجوری به هر حال میتونید مشکلتون رو حل کنید:
باید ارایه رو srialize کنید و بعد توی دیتابیس ذخیره کنید:

$serializedArr = serialize($arr);

و برای گرفتن دوباره از دیتابیس و نمایش دادنش:

$record = SomeModel::find(1);
unserialize($record->field_name);

محمد عابدی
تخصص : Senior Web Developer
@abedim910 4 سال پیش مطرح شد
1

@d373l0p3r درود
موقع ذخیره سازی با json_encode کار کنید

$model = new Model();
$model->column_name = json_encode($arrData);

و در کنترلر این رو اضافه کنید:

protected $casts = ['column_name' => 'array',];

علیرضا فرهادی
تخصص : برنامه نویس و توسعه دهنده وب
@d373l0p3r 4 سال پیش مطرح شد
0

@miladparsi1070 ممنون از پاسختون. پیشنهاد خودتون برای ذخیره محصولات فاکتور در دیتابیس چه روشی هستش؟


علیرضا فرهادی
تخصص : برنامه نویس و توسعه دهنده وب
@d373l0p3r 4 سال پیش مطرح شد
0

@abedim910 تشکر از پاسختون
این مورد رو متوجه نشدم کارش چیه؟

protected $casts = ['column_name' => 'array',];

میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
2

@d373l0p3r
فاکتور هر محصول رو توی یک رکورد توی جدول ذخیره کنید
الان عکسی که دادید برای 3 تا محصوله درسته؟
هرکدوم رو جدا توی جدول ذخیره کنید و 6 تا فیلد جدول رو برای هرکدوم مقداردهی کنید
اینطوری دسترسی بهشون هم راحتتره


محمد عابدی
تخصص : Senior Web Developer
@abedim910 4 سال پیش مطرح شد
2

@d373l0p3r زمانی که مدل رو فراخونی میکنید نیاز نیست json_decode انجام بدید و خودش array بر میگردونه.

$model = Model::find(1);
if(is_array($model->column_name))
    echo 'TRUE'

میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
2

برای تبدیل اعداد انگلیسی به فارسی و برعکس هم فانکشن زیر رو استفاده کنید.

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);
    }

علیرضا فرهادی
تخصص : برنامه نویس و توسعه دهنده وب
@d373l0p3r 4 سال پیش مطرح شد
0

@miladparsi1070

فاکتور هر محصول رو توی یک رکورد توی جدول ذخیره کنید
الان عکسی که دادید برای ۳ تا محصوله درسته؟
هرکدوم رو جدا توی جدول ذخیره کنید و ۶ تا فیلد جدول رو برای هرکدوم مقداردهی کنید
اینطوری دسترسی بهشون هم راحتتره

برای اینکار باید عمل 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'])
        ]);```

محمد عابدی
تخصص : Senior Web Developer
@abedim910 4 سال پیش مطرح شد
1

@d373l0p3r عزیز price رو هیچوقت از request نگیر به راحتی قابل تغییر هست. ID رو پاس بده و با ID به قیمت دسترسی پیدا کن


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
1

@d373l0p3r
بله میتونی توی foreach بزارین


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام