سلام دوستان، من توی پروژه ای که برای خودم تعریف کردم به یکسری چالش ها برخوردم و از اونجایی که تازه لاراول رو شروع کردم یکم حل کردن این چالش ها برام مشکل بود و ممنون میشم تا حدودی من رو راهنمایی کنید:
من برای برگزاری تورنومنت، میخوام کاربر هزینه تورنومنت رو بپردازه و تعداد مشخصی هم تیمی انتخاب کنه (هم تیمی هاش باید از اعضای سایت باشند).
1- به نظر شما پرداخت باید بعد از وارد کردن اطلاعات و انتخاب هم تیمی ها توسط کاربر صورت بگیره یا ابتدا پرداخت انجام بشه بهتره؟ درحالت اول احتمال ایجاد اسپم وجود نداره؟ و اصلا چجوری باید اطلاعات رو نگه داشت تا بعد اگر پرداخت صورت گرفت در دیتابیس ثبت بشه؟
2- هرتیم در هر تورنومنت یک اسم داره و این اسم نباید تکراری باشه. چطوری میشه ترکیب تورنومنت آیدی و اسم تیم رو یونیک کرد؟
@arian @mohsenbostan @milad @ali.bayat @hosseinshirinegad98 @hesammousavi @forughi.vahid
سلام
جدول اول tournament داری که قیمت و زمان tournament و سایر مشخصات رو اوکی میکنی
جدول دوم users عضو هست
جدول سوم payments کاربران هست
کاربری که میخواد tournament انتخاب کنه اول عضو میشه در ادامه اش لیست تورنومنت ها رو برای کاربر توی فرمی نمایش میدی و پس از انتخاب tournament در ادامه لیست اعضای سایت رو براش نمایش میدی که بتونه تیک بزنه و پس از انتخاب هم تمیمی ها به مرحله پرداخت هدایتش میکنی و پس از پرداخت در جدول پرداخت ها وضعیت پرداخت و قیمت و ایدی tournament و.. رو براش ذخیره میکنی
توی تمامی این مراحل شما میتونی اطلاعات کاربر رو ذخیره کنی ممکنه بپرسی یعنی چی؟؟
اولین مرحله که ثبت نام کاربر هست و پس از ثبت نام کاربر رو هدایت میکنی به صفحه انتخاب tournament کاربر تورنومنت رو انتخاب میکنه و دکمه صفحه بعد رو میزنه شما اطلاعاتی که توی این فرم وارد کرده رو به یک متد توی کنترلر خودت میفرستی و تا اینجا یک مرحله از اطلاعات کاربر رو میگیرق و ذخیره میکنی
در ادامه پس از تیک زدن هم تیمی ها و پس از زدن دکمه صفحه بعد اطلاعات این فرم هم میفرستی به یک متد دیگه ی کنترلر و ذخیره رو انجام میدی تا اینجا اطلاعات دو مرحله کاربر رو ذخیره کردی و پس از این کارها کاربر رو هدایت میکنی به صفحه پرداخت در صفحه پرداخت اگر پرداخت اوکی بود وضعیت پرداخت و ایدی tournament رو رو براش ذخیره میکنی
هر جایی هم که نیاز بود برای اینکه به کاربر جاری عضو بفهمونی که چه tournament عضو هست و چقدر پرداخت کرده و .. با یک کویری سمت پرداخت ها اول چک میکنی کدام پرداخت تورنومنت کاربری وضعیتش اوکیه اگر اوکیه ایدی تورنومنت رو میگری و با ریلیشن ساده داده های tournament رو از جدول اول که برای مشخصات tournament هست برای کاربر برمیگردونی.
موفق باشی
در مورد اون حالتی که گفتی اسپم میشه میتونی از سشن استفاده کنی و یک ttl براش قرار بدی تا اگر کاربر در طی یک زمان مشخص پرداخت رو انجام نداد اطلاعات حذف بشه و اصلا وارد دیتابیس نشه و اگر هم پرداخت رو انجام داد اطلاعات رو از سشن بخونی و الکونت ذخیره کنی
بهتره اطلاعاتو در سشن نگه داری و تا مرحله پرداخت ثبت نکنی اگر پرداخت در مرحله اخر انجام شد اون وقت میتونی هر مشخصاتی که لازم بودو در جدول سیو کنی. میتونی اطلاعاتو در قالب یک ارایه یک بعدی یا چند بعدی در سشن تا مرحله پرداخت نگه داری این طوری اگه پرداختی انجام نشد اطلاعاتی هم سیو نمیشه.
پرداخت در مرحله اخر باشه اگر پرداخت انجام شد اون وقت مشخصاتو سیو کن
برای یونیک کردن اسم تیم اگر اسم تیم از ورودی گرفته میشه شما با اعتبار سنجی لاراول میتونی یونیک بودنشو انجام بدی بعد با ادی تورنمنت ترکیبش کنی به اولش یا اخرش اضافه کنی
@hosseinshirinegad98 برای این یونیک کردن آیا راه بهتری هم وجود داره؟ چون احساس میکنم اینکه آیدی تورنومنت رو به اول با آخر اسم تیم اضافه کنیم زیاد جالب نباشه و از اونطرف باید یکسری عملیات اضافی انجام بدیم که مثلا موقع نمایش نام تیم، اول اون آیدی رو بگیریم و حذفش کنیم
@juza66 ببینید الان قسمت خرید تورنومنت مشکلی نداره. درواقع همینطوری که شما هم اشاره کردید جدول تورنومنت رو داریم که اطلاعات موردنیاز رو در اون ذخیره میکنیم. جدول payment برای پرداخت ها و یک جدول دیگه هم برای ذخیره تورنومنت آیدی و یوزر آیدی که اطلاعات کسانی که تورنومنت رو خریداری کردن در اون ذخیره میکنم.
مورد اول اینه که مثلا شما ثبت نام کردید و من رو به تیمتون دعوت میکنید، برای من یک پیغام حاوی یک لینک خرید خصوصی ارسال میشه و اگر مایل بودم پرداخت رو انجام میدم و میام توی تیم شما. همزمان ممکنه افراد دیگری هم برام درخواست فرستاده باشند که من فقط یکی رو میتونم انتخاب کنم. این ارسال لینک دعوت ها رو به چه صورت میشه هندل کرد و چجوری میشه لینک خصوصی از طرف یک کاربر برای کاربر دیگه ساخت؟
مورد بعد اینکه برای مشخص کردن تیم های تورنومنت و هم تیمی ها، من یک جدول team_user میسازم و یوزر آیدی و تیم آیدی رو در اون ذخیره میکنم که مشخص میشه هرکس توی چه تیمی هست. برای اینکه مشخص بشه هرتیم توی چه تورنومنتی شرکت کرده هم یک جدول team_tournament که تیم آیدی و تورنومنت آیدی رو ذخیره میکنه به علاوه نام تیم. حالا چجوری میشه در یک تورنومنت خاص نام تیم یونیک باشه. مثلا توی تورنومنت شماره 1 اگر تیمی به اسم راکت وجود داره دیگه کسی نتونه از این اسم توی این تورنومنت استفاده کنه؟
برای اینکه اسم تیم یونیک باشه در بالا هم گفتم اگر قراره این اسمو کاربر از ورودی وارد کنه با اعتبار سنجی لاراول میشه این کارو انجام داد و بهتره که اسم تیم یه انگلیسی نوشته شده باشه اینطوری یونیک کردنش راحته.
در جدول تیم یک فیلد به نام name یا title به این صورت ایجاد کن.
$table->string('title')->unique();
و در زمانی که قراره اسم تیم از ورودی گرفته شه در اعتبارسنجی ا.ن فرم به این صورت عمل کنید
'title'=> 'unique:turnoment_table,title'
با سلام . @javadkarami
بصورت مختصر :
title که وارد شده و توی ریکوئست هست با ستون title توی جدول turnomenttable چک بشه اگر مثلش وجود نبود pass میشه در غیر اینصورت validate false و ارور نمایش میده .
'title'=> 'unique:tableName,columnName'
موقع آپدیت کردن به مشکل خواهید خورد چون عنوان هر چیزی با خودش برابره و با این اعتبارسنجی میبینه که همون عنوان عینا وجود داره پس خطا میده . با یه سرچ ساده متوجه خواهید شد که پارامتری بعد از title باید وارد کنید که id همون سطر جاری در حال ویرایش شدن هست و میاد اون سطر رو ignore میکنه.
در واقع ولیدیشن هنگام آپدیت شما باید به اینصورت باشه :
'title'=> 'unique:tableName,columnName,'.$itemToIgnore->id
موفق باشید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟