سلام دوستان من میخام سیستم کد تخفیف رو برای محصول ایجاد کنم ابتدا ساختار دیتابیسش رو میخام بدونم اینطوری نوشتم اوکیه؟
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
@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 بسازید که هر بار مجبور به چک کردن و ... اضافه و تکراری نشوید.
@wozniak
دوست عزیز مرسی بابت توضیحاتتون در مورد اون product_id رو برا اون قضیه گفتم بذارم ک مثلا یه کاربری تیکت پشتیبانی برای درخواست کد تخفیف محصول مد نظرش بده و بتونم برای محصول مد نظر یه کد تخفیف ایجاد کنم این کار درست نیست؟
در مودرد تاریخ انقضا بله از نوع timestamp میذارم حرف شما درسته
در مورد این یه توضیحی میدید
یک نوع برای کد تخفیف بگذارید. عمومی و خصوصی. هنگامی که عمومیه userid لازم نیست. وهنگامی که خصوصیه userid ست بشه
سلام آقای موسوی در دوره آموزش لاراول کد تخفیفو به صورت حرفه ای پیاده ساز ی نمودن شما مگه اون دوره رو خریداری نکردین؟؟؟
ساختار جداول میتونه این طوری باشه.
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']);
});
یه کد تخفیف برای یه کاربر میتونه ایجاد بشه یا به یه محصول میتونه داده بشه یا به تمام محصولات یه دسته بندی میتونه داده بشه و قبل استفاده از کد تخفیف با تقریبا 3 الی 4 تا چک کردن مقدار میشه تشخیص داد که میشه از کد تخفیف استفاده کرد یا نه , اکثر چک کردن ها هم به صورت ریلیشن و کالکشن هست و راحت میشه این مواردو برسی کرد.@it.mipv
@mehrdadroshanraee68
یک نوع که عرض کردم منظور این است که معلوم شود کدام یک از دو نوع کد تخفیف خصوصی و عمومی را دارید. مثلا یک ستون type که معلوم بشه از نوع public هست یا private.
user_id => null,
type => public
user_id => 345,
type => private
خب.
موقعی هم که کاربر شما از اون کد تخفیف استفاده میکنه ، در table ارتباط دهنده users و coupons ذخیره می کنید که این اون کاربر اون کد تخفیف رو استفاده کرده.
من میتونم کدها رو برای شما بنویسم اما به نظرم بهتره خودتون یکبار تلاش کنید و بنویسید اگر اشکالی داشت با هم بررسی می کنیم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟