راکت

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

10 پاسخ

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

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

ثبت پرسش جدید

پاسخ‌ها

10
میلاد هدایت پور
میلاد هدایت پور
@miladparsi1070

تخصص: در حال پیشرفت

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

$serializedArr = serialize($arr);

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

$record = SomeModel::find(1);
unserialize($record->field_name);
محمد عابدی
محمد عابدی
@abedim910

تخصص: Senior Web Developer

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

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

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

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

شاید پاسخ شما همین‌جا باشد

علیرضا فرهادی
علیرضا فرهادی
@d373l0p3r

تخصص: برنامه نویس و توسعه دهنده وب

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

علیرضا فرهادی
علیرضا فرهادی
@d373l0p3r

تخصص: برنامه نویس و توسعه دهنده وب

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

protected $casts = ['column_name' => 'array',];
میلاد هدایت پور
میلاد هدایت پور
@miladparsi1070

تخصص: در حال پیشرفت

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

محمد عابدی
محمد عابدی
@abedim910

تخصص: Senior Web Developer

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

$model = Model::find(1);
if(is_array($model->column_name))
    echo 'TRUE'
میلاد هدایت پور
میلاد هدایت پور
@miladparsi1070

تخصص: در حال پیشرفت

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

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

تخصص: برنامه نویس و توسعه دهنده وب

@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'])
        ]);```
محمد عابدی
محمد عابدی
@abedim910

تخصص: Senior Web Developer

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

میلاد هدایت پور
میلاد هدایت پور
@miladparsi1070

تخصص: در حال پیشرفت

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

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

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