۱۰ تابع کمتر شناخته شده (اما جالب) در collection لاراول

Eloquent در لاراول واقعا عالی‌ست، اما شاید این قضیه نیاز به گفتن نداشته باشه واقعا. اما هستن توابعی در Eloquent لاراول که برای کار collectionها استفاده می شوند و کمتر شناخته شده‌اند. به شکلی که شما می‌توانید به راحتی collectionها را فیلتر کنید، تقسیم بندی کنید و یا مدیریت نمایید. پس بهتره که این ۱۰ تابع را بررسی کنیم:

توجه: Collectionها یک اصطلاح گسترده تر هستند، در حالی که Collection Eloquent، اجرای این Collectionهای گسترده تر است. بنابراین همه چیزهایی را که ما در اینجا قرار می دهیم می توان برای هر دو مورد استفاده کرد.

خب، برای مثال، شما یک کد لاراول مانند زیر دارید:

$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],
]

خب حالا چه کارهایی میشه روش انجام داد؟ نکته مهم این است که تمام توابعی که در پایین معرفی می‌شوند، بدون کوئری به دیتابیس انجام می‌شوند. بنابراین شما می‌توانید یک بار کوئری خودتون رو اجرا کنید و سپس همه عمل‌های collection رو به صورت آفلاین اجرا کنید. 

1. avg()

اگر بخواهید میانگین قیمت کتاب‌ها را محاسبه کنید، نیازی به زدن query جداگانه ندارید و می‌تونید به راحتی به روش زیر میانگین قیمت‌ها رو به روش زیر محاسبه کنید:

$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()

خیلی ساده - چک می‌کند که collection ما شامل یک مقدار خاص در فیلدهای خود هست یا خیر؟

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

4. every()

یک متود دیگر برای تقسیم‌بندی collection به ستون‌های مختلف. منتها با این تفاوت که متود every() یک collection جدید می‌سازد که شامل elementهایی nتایی است. (در اینجا دو تایی)


$books->every(2); // every 2nd element
نتیجه:

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

5. filter()

این متود برای فیلتر کردن نتایج یک collection استفاده می شود:


$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()

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


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

نتیجه:

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

8. keyBy()

این متود، برای استفاده با حلقه foreach بسیار کاربردی است. شما می‌توانید با این متود collection را با استفاده از یک key به یک آرایه تبدیل کنید.

$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 را برگردونید و روی آنها عملیاتی نیز انجام دهید، می‌توانید از متود map استفاده کنید، بدون اینکه نیازی به 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]

خب این هم از ۱۰ متود کمتر شناخته شده ای که گفتم در حالی که اینها حتی نصفی از متودهای در دسترس collection لاراول هم نیست. شما می‌توانید لیست کامل آنها را با مثال‌هاشون در داکیومنت لاراول برای Eloquent Collections و Basic Collections مشاهده کنید.

کامنت ها (0)

ارسال نظر