کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش collection در Laravel

collection ها

  1. مقدمه
  2. متدهای کلاس Collection
  3. collection های اختصاصی

مقدمه

تمامی مجموعه های چند نتیجه ای که در خروجی کوئری های Eloquent دریافت می کنیم، در واقع نمونه ای از شیIlluminate\Database\Eloquent\Collection هستند. نتایج واکشی شده توسط متد get یا رابطه ها (relationship method) نیز از این قاعده مستثنی نیستند. شی نام برده کلاس پایه ی (base) collection لاراول را به ارث می برد. بنابراین تمامی توابعی که برای کار با Eloquentاستفاده می شوند نیز به ارث برده می شوند.
می توان در تمامی collection ها مانند آرایه حلقه زد (collection ها قابل iterate هستند).

$users = App\User::where('active'، 1)->get();
foreach ($users as $user) {
   echo $user->name;
}

البته collection ها بسیار قدرتمندتر از آرایه ها هستند و می توان از آن ها برای عملیات نگاشت / سازماندهی و کاهش (map/reduce) بهره گرفت. این عملیات را می توان از طریق یک رابط (intuitive interface) مانند زنجیر به هم متصل کرد. در نمونه ی زیر تمامی مدل های غیرفعال را حذف کرده و اسم تمامی کاربران باقی مانده را بیرون می کشیم:

$users = App\User::where('active'، 1)->get();
$names = $users->reject(function ($user) {
   return $user->active === false;
})
->map(function ($user) {
   return $user->name;
});
نکته:

بیشتر توابع collection در Eloquent یک نمونه ی جدید از collection در خروجی برمی گردانند، این درحالی است که متدهایpluck، keys، zip، collapse، flatten و flip یک نمونه از collection پایه را به عنوان نتیجه برمی گردانند.

متدهای کلاس Collection

کلاس پایه ی collection

تمامی collection های Eloquent شی پایه ی collection لاراول را به ارث می برند. از این رو، تمامی متدهای قدرتمند این کلاس نیز در اختیار کالکشن ها قرار می گیرد:

  1. all
  2. chunk
  3. collapse
  4. contains
  5. count
  6. diff
  7. each
  8. every
  9. filter
  10. first
  11. flatten
  12. flip
  13. forget
  14. forPage
  15. get
  16. groupBy
  17. has
  18. implode
  19. intersect
  20. isEmpty
  21. keyBy
  22. keys
  23. last
  24. map
  25. merge
  26. pluck
  27. pop
  28. prepend
  29. pull
  30. push
  31. put
  32. random
  33. reduce
  34. reject
  35. reverse
  36. search
  37. shift
  38. shuffle
  39. slice
  40. sort
  41. sortBy
  42. sortByDesc
  43. splice
  44. sum
  45. take
  46. toArray
  47. toJson
  48. transform
  49. unique
  50. values
  51. where
  52. whereLoose
  53. zip

کاربرد هر یک از این توابع را قبلا در درس collection ها، بخش سرویس های لاراول تشریح کردیم.

ایجاد collection های اختصاصی

چنانچه لازم است از یک شی Collection سفارشی به همراه متدهای الحاقی (extension method) خود استفاده کنید، در آن صورت می توانید متدnewCollection را در مدل بازنویسی (override) نمایید:

<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
   /**
    * Create a new Eloquent Collection instance.
    *
    * @param array $models
    * @return \Illuminate\Database\Eloquent\Collection
    */
   public function newCollection(array $models = [])
   {
       return new CustomCollection($models);
   }
}

پس از اینکه متد newCollection را تعریف کردید، هر بار که Eloquent یک نمونه Collection از مدل مربوطه را برمی گرداند به همراش نمونه ای از collection سفارشی خود را در خروجی دریافت می کنید. اگر می خواهید به ازای هر مدل در اپلیکیشن خود یک collection سفارشی استفاده کنید، در آن صورت می بایست متد newCollection را بر روی کلاس مدل پایه که توسط تمامی مدل های برنامه به ارث برده می شود، بازنویسی نمایید.

1395/04/05 4185 1527
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...