عنوان مقاله :

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

گردآوری و تالیف : حسام موسوی
تاریخ انتشار : 06 آذر 1394
دسته بندی ها : لاراول

به نظر من 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 ها در دسترستونن هست خیلی بیشتر از این حرفاست . شما میتونید با مراجعه به داکیومنت لاراول این متدها رو همراه با مثال های سادشون مشاهده کنید و در صورت لزوم در پروژهاتون ازشون استفاده کنید . 

مقالات پیشنهادی

دیباگ کردن اپلیکیشن های لاراولی با لاراول Debugbar

پکیج لاراول دیباگر توسط شخصی به نام Barry vd. Heuvel منتشر شده که به شما اجازه میده خیلی سریع و راحت اطلاعات اپلیکیشن لاراولی خودتون رو در یک رابطه گر...

یه لقمه نون و لاراول

در این مقاله کوتاه میخواهم در مورد برخی از موضوعاتی در لاراول صحبت کنم که واقعا کسانی که خواهان کار با لاراول هستند باید این موارد را بدانند . بارها و...

تکرار کردن یک سطر در لاراول

امروز میخواهم در مورد ویژگی در لاراول صحبت کنم که به اصطلاح "hidden" است ، یعنی این قابلیت در سیستم لاراول وجود دارد اما در documentation لاراول چیزی...

فیلتر کردن نتایج query ها با شروط مختلف

شاید عنوان این مطلب برای شما کمی گیج کننده باشه ، اما بزارید براتون با یک مثال سادش کنم شما دارای لیستی از مشتری هستید و اونا رو با دستور Customer::al...

دیدگاه های ارزشمند شما

امیر | 1 سال پیش

ممنون عالی بود

hatam | 1 سال پیش

سلام
با تشکر مفید بود مطلبتون
تابع forget رو لاراول 5.2 که من دارم کار نمیکنه؟؟ مشکل از کجاست به نظرتون؟؟

admin | 1 سال پیش

با سلام
forget برای session یا کوکی ؟

Kiyan Hami | 2 سال پیش

سلام.
avg رو روی لاراول چند تست گرفتی؟
با تشکر

admin | 2 سال پیش

https://laravel.com/docs/5.1/collections#method-avg

حامد | 2 سال پیش

خوب بود ممنون.