دسته بندی :
تاریخ انتشار : ۰۶ آذر ۱۳۹۴
گردآوری و تالیف : حسام موسوی

کارمو با طراحی گرافیکی شروع کردم و حدود 2 سال طراحی گرافیکی میکردم بعد به طراحی وب علاقه پیدا کردم و همراه طراحی وب عاشق کدنویسی شدم به PHP | sass | css | Jquery | javaScript تسلط کامل دارم . در بین فریم ورک های PHP اول با CodeIgniter کار کردم اما به laravel علاقه مند شدم و دارم بطور حرفه ای دنبالش میکنم . امید من اینکه بتونم کاربرهای ایرانی رو به دنیای بیرون متصل کنم تا بتونن از فناوری های تازه آگاهی داشته باشن

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

دیدگاه های مخاطبین

ثبت دیدگاه شما
  • امیر

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

  • hatam

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

    • admin

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

  • Kiyan Hami

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

    • admin

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

  • حامد

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

پیشنهاد میکنیم این مطالب رو هم مطالعه کنید :