عنوان مقاله :

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

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

چک کردن ویوها در لاراول

لاراول در هر ورژنی که بیرون میده ، معمولا چند تابع جدید به عنوان helper هم به سیستم خودش اضافه میکنه تا کار توسعه دهندها رو ساده تر کنه . در این پست س...

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

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

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

به نظر من Eloquent لاراول یک ابزار عالی در لاراوله - احتمالا نیازی به تاکیید کردن من روی این مسئله نیست چون همه این مسئله رو میدونن . امروز میخوام لیس...

فیلتر کردن نتایج 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 سال پیش

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