راکت

ایجاد کد تخفیف برای محصول در لاراول

10 پاسخ

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

        Schema::create('coupons', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('product_id');

            $table->string('title');
            $table->string('code')->unique();
            $table->string('value')->nullable();
            $table->integer('quantity')->nullable();
            $table->string('start-date')->nullable();
            $table->string('end-date')->nullable();
            $table->enum('type' , ['percent'  , 'fixed']);
            $table->enum('status' , ['enable'  , 'disable']);
            $table->timestamps();

            $table->foreign('product_id')->references('id')->on('products')->onDelete('CASCADE');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE');
        });

چالش اول اینه ک چجوری میتونم مشخص کنم کد تخفیف بعد از اون زمان تعیین شده منقضی بشه و قابل استفاده نشه
چالش دوم اینکه چجوری تعیین کنم کد یکبار استفاده شد بار دوم قابل استفاده نشه
چالش سوم اینکه تعیین کنم کد تخفیف یه کد تخفیف عمومی هست یا مخصوص یک کاربر خاص
@endworld
@ali.bayat
@moeinbabaei
@hosseinshirinegad98

ثبت پرسش جدید

پاسخ‌ها

10
woz
woz
@wozniak

تخصص: fan of open source world

@mehrdadroshanraee68
این سیستم سلیقه ای هست که چطور پیاده بشه .
چند نکته داخل ساختار جدول شما به چشم میخوره که عرض میکنم :
1 - نیازی به start-date نیست احتمالا . وقتی کد تخفیف ایجاد میشه همون تاریخ ساختش میتونه start-date باشه . و end-date رو هم شما می تونید تاریخ expire شدن بزارید ( timestamp انتخاب کنید نه string ) و بعدا که میاید چک می کنید فقط کافیه چک کنید آیا تاریخ حالا از اون تاریخ گذشته یا نه.
2 - شما نباید کد تخفیف رو به محصول خاصی ارتباط بدید به نظرم . کد تخفیف باید روی سفارش اعمال بشه. پس foreign productid رو حذف کنید.
3 - userid که یک foreign key هست رو باید nullable قرار بدید ( فکر کنم فقط اگر تایپ جدول InnoDB Engine باشه میتونید این کار رو انجام بدید - مطمئن نیستم) . یک نوع برای کد تخفیف بگذارید. عمومی و خصوصی. هنگامی که عمومیه userid لازم نیست. وهنگامی که خصوصیه userid ست بشه.
4 - یک جدول ارتباط userid به couponid بسازید که معلوم شود چه یوزری چه کپنی استفاده کرده است.

در کل بهتره برای هر یک از این کارها یک helper function بسازید که هر بار مجبور به چک کردن و ... اضافه و تکراری نشوید.

mehrdad70
mehrdad70
@mehrdadroshanraee68

@wozniak
دوست عزیز مرسی بابت توضیحاتتون در مورد اون product_id رو برا اون قضیه گفتم بذارم ک مثلا یه کاربری تیکت پشتیبانی برای درخواست کد تخفیف محصول مد نظرش بده و بتونم برای محصول مد نظر یه کد تخفیف ایجاد کنم این کار درست نیست؟
در مودرد تاریخ انقضا بله از نوع timestamp میذارم حرف شما درسته
در مورد این یه توضیحی میدید

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

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

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام آقای موسوی در دوره آموزش لاراول کد تخفیفو به صورت حرفه ای پیاده ساز ی نمودن شما مگه اون دوره رو خریداری نکردین؟؟؟
ساختار جداول میتونه این طوری باشه.

Schema::create('discounts', function (Blueprint $table) {
            $table->id();
            $table->string('code');
            $table->integer('percent');
            $table->timestamp('expired_at')->nullable(); 
            $table->timestamps();
        });

        Schema::create('discount_product', function (Blueprint $table) {

            $table->unsignedBigInteger('product_id');
                $table->foreign('product_id')
                    ->references('id')
                    ->on('products')
                    ->onDelete('cascade');

            $table->unsignedBigInteger('discount_id');
                $table->foreign('discount_id')
                    ->references('id')
                    ->on('discounts')
                    ->onDelete('cascade');

            $table->primary(['product_id', 'discount_id']);
        });

        Schema::create('category_discount', function (Blueprint $table) {

            $table->unsignedBigInteger('category_id');
                $table->foreign('category_id')
                    ->references('id')
                    ->on('categories')
                    ->onDelete('cascade');

            $table->unsignedBigInteger('discount_id');
                $table->foreign('discount_id')
                    ->references('id')
                    ->on('discounts')
                    ->onDelete('cascade');

            $table->primary(['category_id', 'discount_id']);
        });

        Schema::create('discount_user', function (Blueprint $table) {

            $table->unsignedBigInteger('user_id');
                $table->foreign('user_id')
                    ->references('id')
                    ->on('users')
                    ->onDelete('cascade');

            $table->unsignedBigInteger('discount_id');
                $table->foreign('discount_id')
                    ->references('id')
                    ->on('discounts')
                    ->onDelete('cascade');

            $table->primary(['user_id', 'discount_id']);
        });
محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

از نمونه کدی که دوست عزیزمون قرار دادن استفاده کنید
@hosseinshirinegad98

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

یه کد تخفیف برای یه کاربر میتونه ایجاد بشه یا به یه محصول میتونه داده بشه یا به تمام محصولات یه دسته بندی میتونه داده بشه و قبل استفاده از کد تخفیف با تقریبا 3 الی 4 تا چک کردن مقدار میشه تشخیص داد که میشه از کد تخفیف استفاده کرد یا نه , اکثر چک کردن ها هم به صورت ریلیشن و کالکشن هست و راحت میشه این مواردو برسی کرد.@it.mipv

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

البته روش های آسونتری هم وجود داره و حتما نمیگم این روش باید استفاده کرد. @it.mipv

mehrdad70
mehrdad70
@mehrdadroshanraee68

@hosseinshirinegad98
این روشی که اقای موسوی استفاده کردن بنظرتون منطقی هست ؟

woz
woz
@wozniak

تخصص: fan of open source world

@mehrdadroshanraee68
یک نوع که عرض کردم منظور این است که معلوم شود کدام یک از دو نوع کد تخفیف خصوصی و عمومی را دارید. مثلا یک ستون type که معلوم بشه از نوع public هست یا private.

  • کد تخفیف عمومی مانند مثلا تخفیف خرید اول از سایت شما ، که هر کاربری میتونه استفاده کنه. و شما در این حالت لازم نیست user_id ست کنید که بفهمید این کد تخفیف برای کی ساخته شده.
    user_id => null,
    type => public
  • کد تخفیف خصوصی هم مانند وقتی که به دلیل فعالیت زیاد کاربر ( مثلا ) شما می خواهید به اون کاربر کد تخفیف بدید و کاربرای دیگه نتونن استفاده کنن، در این حالت user_id رو ست می کنید و ایدی اون کاربر رو قرار میدید در این حالت بعدا میتونید بفهمید که کد تخفیف شما فقط مربوط به این کاربر هست و لاغیر.
    user_id => 345,
    type => private

    خب.
    موقعی هم که کاربر شما از اون کد تخفیف استفاده میکنه ، در table ارتباط دهنده users و coupons ذخیره می کنید که این اون کاربر اون کد تخفیف رو استفاده کرده.
    من میتونم کدها رو برای شما بنویسم اما به نظرم بهتره خودتون یکبار تلاش کنید و بنویسید اگر اشکالی داشت با هم بررسی می کنیم

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

بله روش خوبی هست

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

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