جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
10 متد Collections کمتر شناخته شده ( اما بسیار جالب ) لاراول
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 3 دقیقه

10 متد Collections کمتر شناخته شده ( اما بسیار جالب ) لاراول

به نظر من Eloquent لاراول یک ابزار عالی در لاراوله - احتمالا نیازی به تاکیید کردن من روی این مسئله نیست چون همه این مسئله رو میدونن . امروز میخوام لیستی از متدهای Eloquent رو در این پست معرفی کنم که کمتر شناخته شدن یا شما تا حالا باهاشون کار نکردید چون نمیدونستید چیکار میکنن . شما میتونید با این متدها اطلاعات رو فیلتر کنید ، تیکه تیکه کنید یا تغییر بدید . به من اجازه بدید تا تک تک این متدها رو با شما برسی کنم . 

در قدم اول برای مثال شما کدی مثل کد زیر رو دارید که اطلاعاتی رو بر میگردونه : 

$books = Book::where('release_year', 2015)->get();

در اینجا $books یک collection ، که اساسا شامل یک آرایه با ویژگی های اضافیه . 

نتیجه کد بالا میتونه بصورت زیر باشه :

[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'The One Thing', 'price' => 15],
    ['title' => 'Laravel: Code Bright', 'price' => 20],
    ['title' => 'The 4-Hour Work Week', 'price' => 5],
]

خب حالا چه کاری میتونید با این آرایه انجام بدید ؟ نکته مهم اینکه : شما فقط یکبار با کد بالا اطلاعات رو از دیتابیس دریافت میکنید و تمام کارهای که با متد های زیر انجام میدید به اصطلاح بصورت "offline" انجام میگیره و ارتباطی با دیتابیس نداره . 

1. avg

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

$average_price = $books->avg('price'); // in our case, 12.5

2. chunk

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

$chunks = $books->chunk(2);
$chunks->toArray();

نتیجه کد بالا بصورت زیره : 

[
[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'The One Thing', 'price' => 15]
],
[
    ['title' => 'Laravel: Code Bright', 'price' => 20],
    ['title' => 'The 4-Hour Work Week', 'price' => 5],
]
]

3. contains

این یک متد سادست ،  کارش اینکه برای شما برسی میکنه ایا مقداری در مجموعه وجود داره یا خیر . 

$books->contains('title', 'The One Thing'); // TRUE
$books->contains('title', 'The Second Thing'); // FALSE

4. every

متد دیگری برای تکه سازی collection به ستون های مختلف . در اینجا متد every اطلاعات رو بصورت یکی دی میون بر میگردونه .

$books->every(2); // every 2nd element

 نتیجه : 

[
    ['title' => 'Lean Startup', 'price' => 10],
    ['title' => 'Laravel: Code Bright', 'price' => 20],
]

5. filter

این متد برای فیلتر کردن نتیجه ها استفاده میشه که بصورت مفصل در این مقاله ( فیلتر کردن نتایج query ها با شروط مختلف ) توضیح داده شده است . 

$expensive_books = $books->filter(function ($book) {
    return $book->price > 10;
});

6. forget

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

$books->forget('price');

نتیجه : 

[
    ['title' => 'Lean Startup'],
    ['title' => 'The One Thing'],
    ['title' => 'Laravel: Code Bright'],
    ['title' => 'The 4-Hour Work Week'],
]

7. implode

این متد شبیه تابع خود PHP به اسم implode() . با استفاده از این متد میتونید یک ستون رو بصورت رشته بهم متصل کنید . 

$books->implode('title', ', ');

نتیجه : 

'Lean Startup, The One Thing, Laravel: Code Bright, The 4-Hour Work Week'

8. keyBy

این متد یک متد واقعا کاربردی برای استفاده از foreach . در واقع شما با این متد میتونید یک collection رو با انتخاب یک کلمه کلیدی به یک ارایه منتقل کنید مثل زیر : 

$by_key = $books->keyBy('title');
$by_key->all();

نتیجه : 

[
    'Lean Startup' => ['title' => 'Lean Startup', 'price' => 10],
    'The One Thing' => ['title' => 'The One Thing', 'price' => 15],
    'Laravel: Code Bright' => ['title' => 'Laravel: Code Bright', 'price' => 20],
    'The 4-Hour Work Week' => ['title' => 'The 4-Hour Work Week', 'price' => 5],
]

9. map

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

$discounted_books = $books->map(function ($item) {
    return ['title' => $item->title, 'price' => $item->price / 2];
});

 نتیجه : 

[
    ['title' => 'Lean Startup', 'price' => 5],
    ['title' => 'The One Thing', 'price' => 7.5],
    ['title' => 'Laravel: Code Bright', 'price' => 10],
    ['title' => 'The 4-Hour Work Week', 'price' => 2.5],
]

10. pluck

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

$prices = $books->pluck('price');
$plucked->all();

نتیجه : 

[10, 15, 20, 5]

خب این بود از 10 متد کمتر شناخته شده collection لاراول اما تعداد متد های که برای کار با collection ها در دسترستونن هست خیلی بیشتر از این حرفاست . شما میتونید با مراجعه به داکیومنت لاراول این متدها رو همراه با مثال های سادشون مشاهده کنید و در صورت لزوم در پروژهاتون ازشون استفاده کنید . 

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
4.75 از 4 رای

/@hesammousavi
حسام موسوی
طراح و برنامه نویس

بیشتر از ۱۵ سال هست که در حال برنامه‌نویسی و انجام پروژه های مختلف هستم و ۱۰ سالی هست که آموزش برنامه‌نویسی به علاقمندان حوزه برنامه نویسی میدیم در همه این مدت الان عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

حسام موسوی

طراح و برنامه نویس

۵ مقاله اخیر

۵ مقاله اخیر از این قسمت برای شما در دسترس است