چطور در لاراول شرط‌های تو در تو بنویسیم؟
احسان

نویسنده

  • 1400/10/19
  • 0
  • 193
2 سال پیش| برنامه‌نویسی وب

چطور در لاراول شرط‌های تو در تو بنویسیم؟

چطور در لاراول شرط‌های تو در تو بنویسیم؟

برای دستیابی به نتایج دقیق‌تر و ایجاد شروط تو در تو، در لاراول می‌توانیم از clouser استفاده کنیم و با استفاده از sub query به اطلاعات مورد نظرمان دسترسی پیدا کنیم.

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

Reserve::select('id', 'from', 'till', 'room_number')
            ->where('room_number', $request->room_number)
            ->where(function ($query) {
                $query->whereBetween('from', $start, $end])
                    ->orWhereBetween('till', $start, $end);
            })
            ->get();

اما اگر قصد داشته باشیم متغیرهایی را دریافت و با فیلدهای مورد نظر مقایسه کنیم، از روش زیر و use کردن request یا متغیر خود استفاده می‌کنیم تا نتیجه درستی به دست آید.

Reserve::select('id', 'from', 'till', 'room_number')
            ->where('room_number', $request->room_number)
            ->where(function ($query) use ($request) {
                $query->whereBetween('from', [$request->from, $request->till])
                    ->orWhereBetween('till', [$request->from, $request->till]);
            })
            ->get();

حتی نمونه‌ی زیر نیز یک نمونه‌ی ساده و واضح است که اگر نتیجه‌ی کوئری بیشتر از 0 بود، به این منزله است که اتاق رزرو شده است:

$exists = Reserve::where('room_number', $request->room_number)
->where(function ($query) use ($from, $till) {
	$query->whereBetween('from', [$from, $till])
	->orWhereBetween('till', [$from, $till]);
})
->count();

 

به‌روز رسانی: 1403/8/1
توی وبسایتم سعی می‌کنم محتوایی که تصور کنم ارزشمنده و به بقیه کمکی می‌کنه رو منتشر کنم. امیدوارم از مطالب وبسایت بتونید استفاده کنید و به کارتون بیاد. در ضمن اگه پروژه‌ی تحت وبی دارید که نیاز به برنامه‌نویسی و اجرا داره، می‌تونید با شماره انتهای صفحه با من تماس بگیرید تا در موردش با هم صحبت کنیم.
برچسب‌ها:


دیدگاه کاربران

ثبت دیدگاه

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند*