جستجو در بخش : سوال جواب منابع اسلامی لغت نامه ها قوانین و مصوبات نقل قل ها
×

فرم ورود

ورود با گوگل ورود با گوگل ورود با تلگرام ورود با تلگرام
رمز عبور را فراموش کرده ام عضو نیستم، می خواهم عضو شوم
×

×

آدرس بخش انتخاب شده


جهت کپی کردن میتوانید از دکمه های Ctrl + C استفاده کنید
رویداد ها - امتیازات
در حال بارگذاری
×

رویداد ها - امتیازات

برای بررسی عملکرد فعالیت و امتیازات خود باید در وب سایت وارد باشید. در صورت عضویت از بخش بالای صفحه وارد شوید، در غیر این صورت از دکمه پایین، مستقیم به صفحه ثبت نام وارد شوید.

×
×
×

دلیل درخواست بستن پست

کلیه پست هایی که جنبه تبلیغاتی داشته، محتوای اسپم و بی مفهوم در این دسته قرار میگیرند. همچنین پست هایی که به منظور گرفتن بک لینک درج می شوند شامل این مورد هستند.
حاوی مفاهیم غیر اخلاقی، سیاسی و یا توهین آمیز. کلیه پست هایی که از نظر محتوایی نیاز به بررسی و یا حذف شدن دارند در این دسته قرار می گیرند.
محتوایی با عدم جزئیات کافی و مورد نیاز. کلیه پست هایی که منظور نویسنده به وضوح مشخص نیست و نیازمند توضیحات و جزئیات بیشتر می باشند در این دسته قرار می گیرند.
محتوایی بی ربط با موضوعیت سرفصل کلی. کلیه پست هایی که از منظر مفهوم و مضمون ارتباطی با عنوان اصلی سوال ندارند در این دسته قرار می گیرند.
محتوایی دلخواه و بر پایه سلیقه. کلیه پست هایی که یک پاسخ مشخص ندارند و متوانند چندین پاسخ متفاوت و صحیح داشته باشند که کاملا مبتنی بر نظر شخصی افراد هستند در این دسته قرار می گیرند.
محتوایی در حوزه خیلی وسیع. کلیه پست هایی که از نظر محتوایی در یک حوزه ی وسیعی قرار دارند و مشخصا به یک موضوع خاصی اشاره ندارند که پاسخدهی به آن ها مستلزم تشریح مفاهیمی کلی می باشند در این دسته قرار می گیرند.
قبلا در لام تا کام مطرح شده. پست هایی که دقیقا با همین محتوا و مضمون قبلا در وب سایت لام تا کام درج شده اند، با ذکر آدرس منبع تکراری با پست حال حاضر شامل این دسته هستند. تکراری است با:
به سایر دلایل، نیازمند به بررسی توسط مدیر. به هر دلیل غیری که پست را نیازمند بررسی توسط مدیر کرده، با ذکر دلیل، در این دسته قرار میگیرد.
ارسال رای بستن

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


0
0
1344

غیر فعال سازی کد تخفیف از طرف مدیریت.

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

و کد تخفیفی کاربر به ازای هر دو نفر معرف میکنه و معرفا استفاده میکنن 30 درصد تخفیف میگیرند فقط برای سفارش بعدیشون.

این رو چطور میشه ایجاد کرد؟

سایر لاراول
سوال شده در Mahmoud Khosravi
138 امتیاز


این دو موردی که فرمودید از نظر من 2 موجودیت entity مجزا هست و نباید در قالب یک معماری پیاده سازی بشن. مورد اول خب یک کد رندوم هست که میسازید و به کاربرتون میدید که اگه سفارش اولش بود یک تخفیفی بگیره .. ولی مقوله دوم اسمش هست referal (یعنی تخفیف گرفتن در ازای معرفی یا همون refer کردن دیگران) .. از نظر من در جداول مختلفی در دیتابیس باید این 2 مکانیسم پیاده بشن. ــ سعید مرادی در 5 سال قبل

خب این دو فیلد ها را entity و referal در جدول users ایجاد کنم؟ ــ Mahmoud Khosravi در 5 سال قبل

نه دوست عزیز .. در واقع واژه entity به معنی "موجودیت" هست. عرض بنده این بود که شما جداول جدایی برای هندل کردن این 2 فرایند لازم دارید .. براتون یک جواب مینویسم. ــ سعید مرادی در 5 سال قبل

500 کاراکتر باقی مانده

1 جواب

2

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

  1. دادن تخفیف به سفارش اولی ها (که توسط یک کد تخفیف معتبر اعمال میشه)
  2. دادن تخفیف به افرادی که شما رو به دیگران معرفی میکنن (مبتنی بر هم 2 نفر معرفی شده)

برای پیاده سازی منطق مکانیسم اول، شما صرفا یک جدول جدید احتیاج دارید که کدهای تخفیفتون رو اونجا ثبت میکنید که برای اعتبارسنجی کدهایی که کاربرهاتون وارد میکنن ازش استفاده میکنید. یک همچین چیزی:

// discountCodes
+----+--------+
| id | code   |
+----+--------+
| 1  | FR5S9  |
| 2  | BG4HG  |
+----+--------+

یک جدول هست با نام «کدهای تخفیف» (DiscountCodes) که یک سری کد با هر منطقی (میتونه رندوم باشه) توش ثبت شده. پس صرفا کافیه کدی که کاربر وارد میکنه رو به این صورت اعتبار سنجی بکنید:

SELECT 1 FROM discountCodes WHERE code = $enteredCode

که اگه کوئری بالا 1 رو برگردوند به این معنی هست که کدی که کاربر وارد کرده (یا همون $enteredCode) جزو همون کدهای معتبر شما هست. اینجا یک مورد دیگه هم باید چک بشه و اون «سفارش اول بودن» هست. برای چک کردن این مورد باید از جدولی به اسم Orders (یا همون جدول سفارشات) استفاده کنید. قاعدتا همچین جدولی (حالا شاید با نام دیگه ای) رو دارید توی پروژتون که سفارشات ثبت شده کاربراتون رو توش نگهداری میکنید. خلاصه با یه همچین کوئری باید چک کنید که کاربر N# چندتا سفارش داشته تا حالا:

SELECT count(*) FROM orders WHERE user_id = '#N'

و طبیعتا بعدش چک میکنید که اگه خروجی کوئری بالا 0 هست - یعنی کاربر تا به حال سفارشی نداشته - و مشمول تخفیف میشه:

if ( $resOfQuery === 0 ){
    ApplyDiscount($orderId); // یک تابع هست که باید بنویسیدش برای اعمال کردن تخفیف
} else {
    // اولین سفارش کاربر نیست

حالا اینکه چقدر میخواید تخفیف بدید یا شاید بخواید بجای تخفیف روی سفارش، کیف پولش رو شارژ کنید و خلاصه تمام این منطق ها (business logic) توی همون تابع ApplyDiscount($orderId) باید در نظر گرفته بشه.


برای پیاده سازی منطق مکانیسم دوم، شما کافیه به جدول usersی که دارید دو ستون اضافه کنید که آیدی کسی که ایشون رو معرفی کرده رو توش ثبت میکنید و یک ستون دیگه که نشون میده برای این کاربر به معرفش تخفیف داده شده قبلا یا نه:

// users
+----+-------+---------------+----------+----------
| id | name  | refered_by_id |  expired | ...
+----+-------+---------------+----------+----------
| 1  | Ali   | null          | 0        |
| 2  | Vahid | 1             | 0        |
| 3  | Saed  | 2             | 0        |
| 4  | Zahra | 1             | 0        |
+----+-------+---------------+----------+----------

نکته1: ستون refered_by_id درواقع آیدی اون فردی رو نشون میده که ایشون رو معرفی کرده.

نکته2: ستون expired نشون میده که تخفیف به معرف کاربر داده شده یک بار و دیگه نباید بهش تخفیف داده بشه.

از نظر UX هم اینطوری میتونه باشه که برای هر کاربر یک «کد معرف» یکتا وجود داشته باشه توی پروفایلش که بتونه اونو به دیگران بده (یا توسط شبکه های اجتماعی با سایرین به اشتراکش بزاره)، از اون طرف هم هر زمانی که کاربر جدید ثبت نام میکنه، توی پنل یا پروفایلش یه جایی باشه برای وارد کردن «کد معرف». دقیقا ایجا همون جاییه که شما باید ستون refered_by_id رو با کد معرف تکمیل کنی. حالا باز میتونی یک کوئری دیگه داشته باشی برای اینکه چک کنی ببینی کاربر #N، آیا 2 نفر رو معرفی کرده که هنوز ازشون تخفیف نگرفته یا نه:

SELECT count(*)
FROM users
WHERE refered_by_id = '#N'
  AND expired = 0

کوئری بالا در واقع چک میکنه که کاربر #N چه تعداد کاربر دیگه رو معرفی کرده که هنوز در ازاشون تخفیفی نگرفته. بعدم که چک میکنی اگر این عدد بزرگتر یا مساوی 2 بود، خب بهش تخفیف مد نظرت رو میدی. به این شکل:

if ( $resOfQuery >= 2 ){
    ApplyDiscount($orderId); 
    // همچنین جدول کاربران بروزرسانی شود و 2 نفر معرفی شده باطل شوند، در ادامه توضیح دادم
} else {
    // این کاربر هنوز 2 نفر را معرفی نکرده. اگر هم کرده، قبلا برایشان تخفیف گرفته و هنوز 2 نفر جدید را معرفی نکرده.
}

}

این هم بگم که حتما بعد از اعمال تخفیف باید بعدش جدول users رو بروز رسانی (UPDATE users) بکنی و بابت تخفیفی که بهش دادی 2 نفر از افرادی رو که معرفی کرده و هنوز براشون تخفیفی نگرفته رو باطل کنی. به این شکل:

UPDATE 
SET expired = 1
WHERE refered_by_id = '#N'
  AND expired = 0
LIMIT 2
جواب داده شده در سعید مرادی
1933 امتیاز

500 کاراکتر باقی مانده


جواب شما
     
.....
×

×

جعبه لام تا کام


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

تبلیغات توضیحی


داپ اَپ اولین پلتفرم کش‌بک در ایران
اگه میخوای از خریدهایی که میکنی، پاداش نقدی دریافت کنی داپ اَپ رو نصب کن.

تبلیغات تصویری