سلام دوستان
امیدوار هستم که حال همتون خوب باشه
ببخشید من داخل یه پروژه ایی به مشکلی بر خوردم اگه راهنمایی کنید یه دنیا ممنون میشم
ببینید:
من چنین فرمی رو دارم که برای رزرو کردن محفل عروسی هست خب
که تاریخ رو انتخاب میکنیم بعد زمان رو انتخاب میکنیم و در نهایت سالون ها رو هم انتخاب میکنیم که در بخش سالون ها طرف میتونه چند تا سالون رو انتخاب بکنه . طبیعا این فورم فیلد های دیگه هم داره ولی مشکل من این سه تا فیلدی هست که ذکر کردم.
۱- یکی از مشکلاتم این هست که من چطوری میتونم این ۳ تا فیلد رو unique ش بکنم در validation که دوباره تکرار نشه.
ببینید unique کردن این طوری هست که :
من تاریخ و زمان برگزاری رو داخل یه جدول به نام ceremony دارم و همین طور برای سالون ها هم یک جدول دیگه به نام salons دارم که کلید خارجیش اومده داخل جدول ceremony خب. که ۳ تا فیلدش به ترتیب:
celebration_date , time, salon_id هست که داخل جدول ceremony اومدن .
این سه تا رو من چطور میتونم با هم uniqueش بکنم ؟
'time'=>'required',
'salons'=>['required','array'],
'celebration_date' => [
'required',
Rule::unique('ceremonies')->where(function ($query) use ($request) {
return $query->where('celebration_date', $request->celebration_date)
->where('time', $request->time)
->where('salon_id',$request->salons);
}),
],
از این روش استفاده کردم ولی پاسخ گو نیست
بعد آقای موسوی گفتن که رابطه بین salon و ceremony یک رابطه چند به چند هست
بعد من هم اومدم یک جدول pivot به نام ceremony_salon ساختم خب و داخل اون جدول pivot, فیلد های ceremony_id, salon_id رو گذاشتم خب
حالا مشکل بعدی این هست که من چطور میتونم اینو uniqe ش بکنم طوری که celebration_date , time , salon_id تکرار نشن خب. اگه دقت داشته باشید salon_id داخل جدول ceremony_salon هست و celebration_date و time در جدول ceremony.
2- مشکل دومی که دارم این هست که :
ببینید :
من یه فیلدی رو تعریف کردم به نام status که در حقیقت تایپش boolean هست خب
این فیلد هم داخل جدول ceremony هست
قبل از این که ادامه بدم ...
یه موضوع دیگه این هست که من برای هر محفل عروسی که رزور میکنم که همون ceremony هستش خب: یه جدول دیگه ایی هم دارم به نام ceremony_income که در حقیقت income هر محفل رو داخلش ذخیره میکنم
ببینید
من زمانی میتونم income اون محفل عروسی رو حساب کنم که تاریخ اون یا مساوی امروز باشه یا بزرگتر از امروز باشه . چون این شرط رو گذاشتم که طرف فقط بتونه از محفلی که تاریخش به امروز رسیده income بگیره یا این که تاریخش از امروز بزرگتر باشه اوکی
این کار رو به خاطر این که کردم که بعدا داخل ceremony_income ی که در عکس زیر مشاهده میکنید کاربر رو محدوتر بکنم که فقط بتونه به محفل هایی دسترسی داشته باشه که با شرایطی که گفتم مطابقت داشته باشه:
(تاریخ icome باید یا مساوی امروز باشه یا بزرگتر از امروز باشه خب)
حالا این وسط اومدم یه فیلد جدیدی به نام status رو هم وارد جدول ceremony کردم که قبلا هم اشاره کردم خب
این فیلد نوعیتش boolean هست خب که با استفاده از یه trigger ی که در زیر مشاهده میکنید کنترولش میکنم طوری که مقدار پیش فرض این فیلد هم صفر هست.
public function up()
{
DB::unprepared('
CREATE TRIGGER flag_trigger AFTER INSERT ON `ceremony_incomes` FOR EACH ROW
BEGIN
UPDATE `ceremonies` SET `income`=1 where celebration_date=NEW.celebration_date AND time = NEW.time AND salon_id=NEW.salon_id;
END
');
}
کاری که این فیلد باید انجام بده این هست که وقتی که ceremony یا محفلی رزرو شد این به صورت پیش فرض صفر مقدار دهی میشه خب
ولی وقتی که کاربر income همون محفل رو حساب کرد مقدارش یک (۱) بشه خب که میخوام این کار رو با استفاده از trigger بکنم طوری که باید نظر به celebration_date ,time,salon_id تریگر خودم رو باید بنویسم .
باز هم اگه ببینید celebration_date ,time داخل جدول ceremony هستش خب و همین طور salon_id داخل جدول ceremony_salon
نمیدونم که چقدر تونستم منظور خودمو برسوم ولی فعلا کار هایی که انجام دادم همشون به ارور مواجه شدم
آیا کاری که میکنم درسته؟
اگه ایده دیگه ایی دارین خیلی ممنون میشم بهم بگید و اگر روش من درسته ارور های این روش رو اگه ذکر بکنید خیلی ممنونتون میشم
یه دنیا سپاس 😘
به مهدی احمدی کمک کنید تا مشکل خودش را حل کند؛ اینطور میتوانیم با هم پیشرفت کنیم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟