آشنایی با توابع whereAny و whereAll در لاراول
در بهروزرسانی ۱۰.۴۷ لاراول، دو تابع جدید به نامهای whereAny و whereAll به Eloquent Query Builder اضافه شدهاند. این دو تابع به شما کمک میکنند تا کوئریهای خود را آسانتر و خواناتر بنویسید و از پیچیدگیهای کدهای برنامهنویسی بکاهید.
کاربرد توابع whereAny و whereAll در لاراول
فرض کنید میخواهید لیستی از کاربران را با نام یا ایمیل یا شماره تلفن خاص پیدا کنید. در گذشته برای انجام این کار، مجبور بودید از چندین where clause به صورت تو در تو استفاده کنید:
1 2 3 4 |
$users = User::where( 'name', 'like', "%{$search}%" ) ->orWhere( 'email', 'like', "%{$search}%" ) ->orWhere( 'phone_number', 'like', "%{$search}%" ) ->get(); |
این کد کار میکند، اما خواندن و درک آن دشوار است. با استفاده از whereAny
میتوانید به راحتی به همان نتیجه برسید:
1 |
$users = User::whereAny(['name', 'email', 'phone_number'], 'like', "%$search%")->get(); |
در این مثال، whereAny
ردیفهایی را جستجو میکند که یکی از ستونهای name
، email
یا phone_number
آن شبیه به عبارت $search
است.
مثال برای تابع whereAll
با کمک این تابع هم میتوانید چند شرط را به صورت همزمان با and و به شکل کوتاهتر بنویسد. در مثال زیر یک مقدار را با چند فیلد به صورت همزمان مقایسه میکنیم:
1 2 3 4 5 6 7 |
$posts = DB::table( 'posts' ) ->where( 'published', true ) ->whereAll( [ 'title', 'content', ], 'LIKE', '%Laravel%' )->get(); |
اجرای دستورات بالا، کوئری زیر را تولید میکند:
1 2 3 4 5 |
SELECT * FROM posts WHERE published = true AND ( title LIKE '%Laravel%' AND content LIKE '%Laravel%' ) |
با استفاده از این دو تابع جدید به مزایای زیر دست پیدا میکنید:
- سادگی
whereAny
وwhereAll
کد شما را کوتاهتر و خواناتر میکنند. - خوانایی
این توابع هدف از کوئری شما را به خوبی نشان میدهند. - کارایی
whereAny
وwhereAll
میتوانند در برخی موارد از نظر عملکرد، کارآمدتر از کوئریهای سنتی باشند.
روشهای جایگزین
قبل از whereAny
و whereAll
، از روشهای زیر برای انجام جستجوهای مشابه استفاده میشد:
- استفاده از چندین where clause به صورت تو در تو
همانطور که بالاتر در مثال شرح داده شد. - استفاده از whereIn
میتوانید از whereIn برای جستجو در چندین مقدار در یک ستون استفاده کنید. - استفاده از کوئریهای SQL خام
میتوانید کوئریهای SQL را به طور مستقیم بنویسید.