mehrdad70
4 سال پیش توسط mehrdad70 مطرح شد
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


ثبت پرسش جدید
woz
تخصص : fan of open source world
@wozniak 4 سال پیش آپدیت شد
1

@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
@mehrdadroshanraee68 4 سال پیش مطرح شد
0

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

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش آپدیت شد
2

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

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

محمد معین بابائی
تخصص : Web developer
@moeinbabaei 4 سال پیش مطرح شد
1

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


mehrdad70
@mehrdadroshanraee68 4 سال پیش مطرح شد
0

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


woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
0

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

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

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


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

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