collection در لاراول چیست

دسته بندی: لاراول
سطح مقاله: متوسط
زمان مطالعه: 25 دقیقه
۲۵ مرداد ۱۳۹۹
فارسی
کالکشن
English
Collection

Collection یکی از قدرتمندترین امکاناتی است که لاراول در اختیار شما قرار می‌دهد. در واقع اگر با ماهیت Collection‌‌ها در لاراول آشنایی نداشته باشید، احتمالا در هنگام کار کردن با الوکوئنت (Eloquent) لاراول با مشکل مواجه می‌شوید. به طور مثال در ساده‌ترین حالت، فرض کنید ده‌ها داده دارید که می‌خواهید میانگین این داده‌ها را حساب کنید، یا فرض کنید که آرایه‌ای از اعداد، نام‌ها، تاریخ مصرف کالا‌ها، قیمت مصرف کننده و قیمت فروش دارید، حال بدون استفاده از Collection‌ها محاسبه مجموع فروش یک روز تقریبا غیر ممکن می‌شود. این‌ها تنها مثال‌های بسیار کوچکی از Collection‌ها است که در این مقاله به معرفی آن‌ها و آموزش کار با آن می‌پردازیم.

نام Collection‌ها در لاراول

لاراول تا به امروز شامل بیش از ۱۲۰ Collection با قابلیت‌های شگفت انگیزی است که ابتدا این Collection‌ها را نام می‌بریم و سپس به توضیح هر کدام از آن‌ها می‌پردازیم.

  • all
  • average
  • avg
  • chunk
  • collapse
  • collect
  • combine
  • concat
  • contains
  • count
  • countBy
  • crossJoin
  • dd
  • diff
  • diffAssoc
  • diffKeys
  • dump
  • duplicates
  • duplicatesStrict
  • each
  • except
  • first
  • firstWhere
  • flip
  • forget
  • get
  • groupBy
  • has
  • implode
  • intersect
  • intersectByKeys
  • isEmpty
  • isNotEmpty
  • join
  • last
  • max
  • median
  • merge
  • mergeRecursive
  • min
  • pluck
  • pop
  • prepend
  • pull
  • push
  • put
  • random
  • replace
  • reverse
  • search
  • shift
  • shuffle
  • sort
  • sortBy
  • sortByDesc
  • sortDesc
  • sortKeys
  • sortKeysDesc
  • splice
  • sum
  • times
  • toArray
  • unique
  • unless
  • unwrap
  • values
  • where
  • whereStrict
  • whereBetween
  • whereIn
  • whereInStrict
  • whereInstanceOf
  • whereNotBetween

کاربرد Collection‌ها در لاراول

تمامی Collection هایی که در بالا نام بردیم کاربرد‌های متعددی دارند که به‌ترتیب به تمام آن‌ها می‌پردازیم.

all

این متد تمام داده‌های یک آرایه را بر‌می‌گرداند.

collect([1, 2, 3])->all();

// [1, 2, 3]

average

این متد و متد ()avg میانگین داده‌ها را به ما برمی‌گرداند.

$average = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->avg('foo');

// 20

$average = collect([1, 1, 2, 4])->average();

// 2

chunk

این متد یک آرایه را به‌صورت مساوی  دسته بندی می‌کند. به‌طور مثال اگر بر روی یک آرایه‌ی ۸ تایی (4)chunk را اعمال کنیم. این آرایه به ۲ آرایه‌ی ۴ تایی تقسیم می‌شود، البته اگر به‌طور مثال تعداد اعضای آرایه ۱۰ باشد، chunk آن را به ۲ آرایه‌ی ۴ تایی و ۱ آرایه‌ی ۲ تایی تقسیم می‌کند.

$collection = collect([1, 2, 3, 4, 5, 6, 7]);

$chunks = $collection->chunk(4);

$chunks->toArray();

// [[1, 2, 3, 4], [5, 6, 7]]

این متد هنگام کار با View‌ها بسیار کاربردی می‌باشد، در مثال زیر  Product‌ها را به آرایه‌های ۳ تایی تقسیم کردیم و سپس نمایش دادیم.

@foreach ($products->chunk(3) as $chunk)
    <div class="row">
        @foreach ($chunk as $product)
            <div class="col-xs-4">{{ $product->name }}</div>
        @endforeach
    </div>
@endforeach

collapse

این متد چند آرایه را به یک آرایه تبدیل می‌کند.

$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);

$collapsed = $collection->collapse();

$collapsed->all();

// [1, 2, 3, 4, 5, 6, 7, 8, 9]

collect

این متد یک Collection جدید از روی Collection اصلی ایجاد می‌کند، یعنی می‌توانیم از این متد هنگامی که می‌خواهیم از یک Collection کپی بگیریم، استفاده کنیم.

$collectionA = collect([1, 2, 3]);

$collectionB = $collectionA->collect();

$collectionB->all();

// [1, 2, 3]

combine

این متد بر روی بیش از یک آرایه اعمال می‌شود، به این صورت که فرض کنید یک آرایه با مقادیر نام و سن و یک آرایه‌ی دیگر با مقدار علی و ۲۰ داریم. حال اگر این دو آرایه را Combine کنیم، آرایه‌ی نهایی به صورت [ '۲۰'<='سن' , 'علی'<='نام' ] درمی‌آید.

$collection = collect(['name', 'age']);

$combined = $collection->combine(['George', 29]);

$combined->all();

// ['name' => 'George', 'age' => 29]

concat

این متد Value‌های دو یا چند آرایه را در یک آرایه قرار می‌دهد.

$collection = collect(['John Doe']);

$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);

$concatenated->all();

// ['John Doe', 'Jane Doe', 'Johnny Doe']

contains

از این متد زمانی استفاده می‌کنیم که بخواهیم بدانیم آیا یک Value در یک آرایه وجود دارد یا خیر.

$collection = collect(['name' => 'Desk', 'price' => 100]);

$collection->contains('Desk');

// true

$collection->contains('New York');

// false

هم‌چنین می‌توانیم چک کنیم که آیا یک Key و Value به‌طور هم‌زمان در یک آرایه وجود دارند یا خیر.

$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
]);

$collection->contains('product', 'Bookcase');

// false

count

این متد تعداد داده‌های موجود در یک Collection یا آرایه را بر‌می‌گرداند.

$collection = collect([1, 2, 3, 4]);

$collection->count();

// 4

countBy

این متد تعداد تكرار هر داده را به ما بر‌می‌گرداند.

$collection = collect([1, 2, 2, 2, 3]);

$counted = $collection->countBy();

$counted->all();

// [1 => 1, 2 => 3, 3 => 1]

crossJoin

این متد به‌طور مثال هنگامی که بر روی دو آرایه اعمال شود، داده‌ی اول آرایه‌ی اول را به تمام داده‌های آرایه‌ی دوم، داده‌ دوم آرایه‌ی اول را به تمام داده‌های آرایه‌ی دوم و به همین صورت تا انتها نسبت می‌دهد.

$collection = collect([1, 2]);

$matrix = $collection->crossJoin(['a', 'b']);

$matrix->all();

/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/

$collection = collect([1, 2]);

$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);

$matrix->all();

/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/

dd

این متد در هر جایی از کد بیاید تمام داده‌های درخواستی را نمایش می‌دهد و پس از آن ادامه‌ی کد متوقف خواهد شد.

$collection = collect(['John Doe', 'Jane Doe']);

$collection->dd();

/*
    Collection {
        #items: array:2 [
            0 => "John Doe"
            1 => "Jane Doe"
        ]
    }
*/

اگر می‌خواهید که ادامه‌ی کد متوقف نشود، می‌توانید به‌جای dd از dump استفاده کنید.

dump

این متد در هر جایی از کد بیاید تمام داده‌های درخواستی را نمایش می‌دهد و پس از کد ادامه پیدا می‌کند.

The dump method dumps the collection's items:

$collection = collect(['John Doe', 'Jane Doe']);

$collection->dump();

/*
    Collection {
        #items: array:2 [
            0 => "John Doe"
            1 => "Jane Doe"
        ]
    }
*/

diff

این متد اگر بر روی ۲ آرایه اعمال شود، تمام داده‌هایی که در آرایه‌ی اول وجود دارد ولی در آرایه‌ی دوم وجود ندارد را بر‌می‌گرداند.

$collection = collect([1, 2, 3, 4, 5]);

$diff = $collection->diff([2, 4, 6, 8]);

$diff->all();

// [1, 3, 5]

diffAssoc

این متد همانند متد diff عمل می‌کند با این تفاوت که به‌جای بررسی Value ها، هم Value و هم Key دو یا چند آرایه را با هم مطابقت می‌دهد و در صورتی که دقیق همان Key و Value که در آرایه‌ی اول وجود دارد در آرایه‌ی دوم وجود نداشته باشد، Key و Value آرایه‌ی اول را بر‌می‌گرداند.

$collection = collect([
    'color' => 'orange',
    'type' => 'fruit',
    'remain' => 6,
]);

$diff = $collection->diffAssoc([
    'color' => 'yellow',
    'type' => 'fruit',
    'remain' => 3,
    'used' => 6,
]);

$diff->all();

// ['color' => 'orange', 'remain' => 6]

diffKeys

این متد همانند متد diff عمل می‌کند با این تفاوت که به‌جای بررسی Value ها، Key‌ها را بررسی می‌کند.

$collection = collect([
    'one' => 10,
    'two' => 20,
    'three' => 30,
    'four' => 40,
    'five' => 50,
]);

$diff = $collection->diffKeys([
    'two' => 2,
    'four' => 4,
    'six' => 6,
    'eight' => 8,
]);

$diff->all();

// ['one' => 10, 'three' => 30, 'five' => 50]

duplicates

این متد تمام داده‌هایی که ۲ بار تکرار شده‌اند را بر‌می‌گرداند.

$collection = collect(['a', 'b', 'a', 'c', 'b']);

$collection->duplicates();

// [2 => 'a', 4 => 'b']

اگر بخواهیم در یک یا چند آرایه، بین Key‌های خاص، دنبال مقادیری بگردیم که ۲ بار تکرار شده‌اند، به شکل زیر عمل می‌کنیم.

$employees = collect([
    ['email' => '[email protected]', 'position' => 'Developer'],
    ['email' => '[email protected]', 'position' => 'Designer'],
    ['email' => '[email protected]', 'position' => 'Developer'],
])

$employees->duplicates('position');

// [2 => 'Developer']

each

این متد تمام داده‌های یک آرایه را مانند حلقه foreach جدا می‌کند و برمی‌گرداند.

$collection->each(function ($item, $key) {
    //
});

except

این متد تمام داده‌های یک آرایه را به‌غیر از مقادیری که وارد کردیم برمی‌گرداند.

$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);

$filtered = $collection->except(['price', 'discount']);

$filtered->all();

// ['product_id' => 1]

first

این متد اولين داده‌ی یک آرایه را برمی‌گرداند.

collect([1, 2, 3, 4])->first();

// 1

firstWhere

این متد اولين داده‌ی یک آرایه را با شرط خاصی که بیان می‌کنیم برمی‌گرداند.

$collection = collect([
    ['name' => 'Regena', 'age' => null],
    ['name' => 'Linda', 'age' => 14],
    ['name' => 'Diego', 'age' => 23],
    ['name' => 'Linda', 'age' => 84],
]);

$collection->firstWhere('name', 'Linda');

// ['name' => 'Linda', 'age' => 14]

به‌طور مثال در کد بالا اولين داده‌ای که نامش Linda است را دریافت می‌کنیم.

$collection->firstWhere('age', '>=', 18);

// ['name' => 'Diego', 'age' => 23]

یا در این مثال اولين داده‌ای که سنش بزرگ‌تر مساوی ۱۸ باشد را دریافت می‌کنیم.

flip

این متد جای Key و Value آرایه را عوض می‌کند.

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);

$flipped = $collection->flip();

$flipped->all();

// ['taylor' => 'name', 'laravel' => 'framework']

forget

این متد یک Key و Value را از آرایه پاک می‌کند.

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);

$collection->forget('name');

$collection->all();

// ['framework' => 'laravel']

get

در این متد با فراخوانی Key یک داده می‌توانید Value آن داده را بخوانید.

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);

$value = $collection->get('name');

// taylor

groupBy

این متد یک آرایه را گروه‌بندی می‌کند، یعنی هنگامی که یک مقدار را به این متد ارسال می‌کنیم، با توجه به آن مقدار، گروه‌های مختلفی از داده‌های آن آرایه ایجاد می‌شود.

$collection = collect([
    ['account_id' => 'account-x10', 'product' => 'Chair'],
    ['account_id' => 'account-x10', 'product' => 'Bookcase'],
    ['account_id' => 'account-x11', 'product' => 'Desk'],
]);

$grouped = $collection->groupBy('account_id');

$grouped->toArray();

/*
    [
        'account-x10' => [
            ['account_id' => 'account-x10', 'product' => 'Chair'],
            ['account_id' => 'account-x10', 'product' => 'Bookcase'],
        ],
        'account-x11' => [
            ['account_id' => 'account-x11', 'product' => 'Desk'],
        ],
    ]
*/

has

این متد وجود یک یا چند داده را در آرایه بررسی می‌کند.

$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]);

$collection->has('product');

// true

$collection->has(['product', 'amount']);

// true

$collection->has(['amount', 'price']);

// false

implode

این متد Value‌های یک آرایه را به هم می‌چسباند.

$collection = collect([
    ['account_id' => 1, 'product' => 'Desk'],
    ['account_id' => 2, 'product' => 'Chair'],
]);

$collection->implode('product', ', ');

// Desk, Chair

collect([1, 2, 3, 4, 5])->implode('-');

// '1-2-3-4-5'

intersect

این متد هنگام مقایسه ۲ آرایه تمام داده‌هایی که در آرایه‌ی اول و دوم وجود دارد را به ما نشان می‌دهد.

$collection = collect(['Desk', 'Sofa', 'Chair']);

$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);

$intersect->all();

// [0 => 'Desk', 2 => 'Chair']

Key داده‌های جدید همان Key آرایه‌ی اول می‌باشد

intersectByKeys

این متد هنگام مقایسه ۲ آرایه تمام Key هایی که در آرایه‌ی اول و دوم وجود دارد را همراه با Value آرایه‌ی اول به ما نشان می‌دهد.

$collection = collect([
    'serial' => 'UX301', 'type' => 'screen', 'year' => 2009,
]);

$intersect = $collection->intersectByKeys([
    'reference' => 'UX404', 'type' => 'tab', 'year' => 2011,
]);

$intersect->all();

// ['type' => 'screen', 'year' => 2009]

isEmpty

این متد خالی بودن یک آرایه را چک می‌کند.

collect([])->isEmpty();

// true

isNotEmpty

این متد خالی نبودن یک آرایه را چک می‌کند.

collect([])->isNotEmpty();

// false

join

این متد Value‌های یک آرایه را همان‌طور که ما بخواهیم به هم می‌چسباند.

collect(['a', 'b', 'c'])->join(', '); // 'a, b, c'
collect(['a', 'b', 'c'])->join(', ', ', and '); // 'a, b, and c'
collect(['a', 'b'])->join(', ', ' and '); // 'a and b'
collect(['a'])->join(', ', ' and '); // 'a'
collect([])->join(', ', ' and '); // ''

last

این متد آخرین داده‌ی یک آرایه را برمی‌گرداند.

collect([1, 2, 3, 4])->last(function ($value, $key) {
    return $value < 3;
});

// 2

collect([1, 2, 3, 4])->last();

// 4

max

این متد بزرگ‌ترین داده‌ی یک آرایه را برمی‌گرداند.

$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');

// 20

$max = collect([1, 2, 3, 4, 5])->max();

// 5

median

این متد داده‌ی وسطی یک آرایه را برمی‌گرداند و در صورتی که دو آرایه در وسط قرار داشته باشند میانگین آن‌ها را برمی‌گرداند.

$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');

// 15

$median = collect([1, 1, 2, 4])->median();

// 1.5

merge

این متد داده‌های یک آرایه را به هم می‌چسباند و در صورتی که یکی از داده‌ها در آرایه‌ی دوم قرار داشته باشد آن را در آرایه‌ی نهایی قرار می‌دهد.

$collection = collect(['product_id' => 1, 'price' => 100]);

$merged = $collection->merge(['price' => 200, 'discount' => false]);

$merged->all();

// ['product_id' => 1, 'price' => 200, 'discount' => false]

$collection = collect(['Desk', 'Chair']);

$merged = $collection->merge(['Bookcase', 'Door']);

$merged->all();

// ['Desk', 'Chair', 'Bookcase', 'Door']

mergeRecursive

این متد داده‌های یک آرایه را به هم می‌چسباند و در صورت تکرار یک داده، هر دوی آن‌ها را در آرایه نهایی قرار می‌دهد.

$collection = collect(['product_id' => 1, 'price' => 100]);

$merged = $collection->mergeRecursive(['product_id' => 2, 'price' => 200, 'discount' => false]);

$merged->all();

// ['product_id' => [1, 2], 'price' => [100, 200], 'discount' => false]

min

این متد کوچک‌ترین داده یک آرایه را برمی‌گرداند.

$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');

// 10

$min = collect([1, 2, 3, 4, 5])->min();

// 1

pluck

این متد تمام Value‌های یک آرایه با یک Key خاص را برمی‌گرداند.

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

pop

این متد داده‌ی‌ آخر یک آرایه را ابتدا به ما نشان می‌دهد و سپس آن را از آرایه‌ی اصلی حذف می‌کند.

$collection = collect([1, 2, 3, 4, 5]);

$collection->pop();

// 5

$collection->all();

// [1, 2, 3, 4]

prepend

این متد یک داده را به ابتدای یک آرایه اضافه می‌کند.

$collection = collect([1, 2, 3, 4, 5]);

$collection->prepend(0);

$collection->all();

// [0, 1, 2, 3, 4, 5]

pull

این متد Value یک Key را ابتدا به ما نشان می‌دهد و سپس آن را از آرایه‌ی اصلی حذف می‌کند.

$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);

$collection->pull('name');

// 'Desk'

$collection->all();

// ['product_id' => 'prod-100']

push

این متد یک داده را به انتهای یک آرایه اضافه می‌کند.

$collection = collect([1, 2, 3, 4]);

$collection->push(5);

$collection->all();

// [1, 2, 3, 4, 5]

put

این متد یک Key و Value را به انتهای یک آرایه اضافه می‌کند.

$collection = collect(['product_id' => 1, 'name' => 'Desk']);

$collection->put('price', 100);

$collection->all();

// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]

random

این متد یک داده را به‌صورت تصادفی بر‌می‌گرداند.

$collection = collect([1, 2, 3, 4, 5]);

$collection->random();

// 4 - (retrieved randomly)

replace

این متد داده‌‌های دو آرایه را در صورت وجود جا‌‌به‌جا و در صورت وجود نداشتن، ایجاد می‌کند.

$collection = collect(['Taylor', 'Abigail', 'James']);

$replaced = $collection->replace([1 => 'Victoria', 3 => 'Finn']);

$replaced->all();

// ['Taylor', 'Victoria', 'James', 'Finn']

reverse

این متد داده‌های یک آرایه را از آخر به اول مرتب می‌کند.

$collection = collect(['a', 'b', 'c', 'd', 'e']);

$reversed = $collection->reverse();

$reversed->all();

/*
    [
        4 => 'e',
        3 => 'd',
        2 => 'c',
        1 => 'b',
        0 => 'a',
    ]
*/

search

این متد Key یک Value را پیدا می‌کند.

$collection = collect([2, 4, 6, 8]);

$collection->search(4);

// 1

shift

این متد داده‌ی‌ اول یک آرایه را ابتدا به ما نشان می‌دهد و سپس آن را از آرایه‌ی اصلی حذف می‌کند.

$collection = collect([1, 2, 3, 4, 5]);

$collection->shift();

// 1

$collection->all();

// [2, 3, 4, 5]

shuffle

این متد داده‌های یک آرایه را درهم می‌کند.

$collection = collect([1, 2, 3, 4, 5]);

$shuffled = $collection->shuffle();

$shuffled->all();

// [3, 2, 5, 1, 4] - (generated randomly)

sort

این متد داده‌های یک آرایه را از کوچک به بزرگ مرتب می‌کند.

$collection = collect([5, 3, 1, 2, 4]);

$sorted = $collection->sort();

$sorted->values()->all();

// [1, 2, 3, 4, 5]

sortBy

این متد داده‌های یک آرایه را با توجه به Key وارد شده از کوچک به بزرگ مرتب می‌کند.

$collection = collect([
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
]);

$sorted = $collection->sortBy('price');

$sorted->values()->all();

/*
    [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]
*/

sortDesc

این متد داده‌های یک آرایه را از بزرگ به کوچک مرتب می‌کند.

$collection = collect([5, 3, 1, 2, 4]);

$sorted = $collection->sortDesc();

$sorted->values()->all();

// [5, 4, 3, 2, 1]

sortKeys

این متد Key‌های یک آرایه را از حرف یا عدد کوچک به بزرگ مرتب می‌کند.

$collection = collect([
    'id' => 22345,
    'first' => 'John',
    'last' => 'Doe',
]);

$sorted = $collection->sortKeys();

$sorted->all();

/*
    [
        'first' => 'John',
        'id' => 22345,
        'last' => 'Doe',
    ]
*/

splice

این متد تعداد دلخواهی از داده‌های یک آرایه را حذف می‌کند و سپس برمی‌گرداند.

$collection = collect([1, 2, 3, 4, 5]);

$chunk = $collection->splice(2);

$chunk->all();

// [3, 4, 5]

$collection->all();

// [1, 2]

sum

این متد مجموع داده‌های یک آرایه را برمی‌گرداند.

collect([1, 2, 3, 4, 5])->sum();

// 15

$collection = collect([
    ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
    ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);

$collection->sum('pages');

// 1272

toArray

این متد یک Collection را به یک آرایه تبدیل می‌کند.

$collection = collect(['name' => 'Desk', 'price' => 200]);

$collection->toArray();

/*
    [
        ['name' => 'Desk', 'price' => 200],
    ]
*/

toJson

این متد یک Collection را به یک کد با فرمت Json تبدیل می‌کند.

$collection = collect(['name' => 'Desk', 'price' => 200]);

$collection->toJson();

// '{"name":"Desk", "price":200}'

unique

این متد داد‌ه‌هایی که تنها یک بار تكرار شده است را برمی‌گرداند.

$collection = collect([1, 1, 2, 2, 3, 4, 2]);

$unique = $collection->unique();

$unique->values()->all();

// [1, 2, 3, 4]

$collection = collect([
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);

$unique = $collection->unique('brand');

$unique->values()->all();

/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ]
*/

$unique = $collection->unique(function ($item) {
    return $item['brand'].$item['type'];
});

$unique->values()->all();

/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
        ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
    ]
*/

where

این متد داده‌هایی با شرایطی که وارد می‌کنیم را بر‌می‌گرداند.

$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);

$filtered = $collection->where('price', 100);

$filtered->all();

/*
    [
        ['product' => 'Chair', 'price' => 100],
        ['product' => 'Door', 'price' => 100],
    ]
*/

$collection = collect([
    ['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
    ['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
    ['name' => 'Sue', 'deleted_at' => null],
]);

$filtered = $collection->where('deleted_at', '!=', null);

$filtered->all();

/*
    [
        ['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
        ['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
    ]
*/

whereBetween

این متد داده‌هایی که بین دو مقدار خاص هستند را بر‌می‌گرداند.

$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 80],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Pencil', 'price' => 30],
    ['product' => 'Door', 'price' => 100],
]);

$filtered = $collection->whereBetween('price', [100, 200]);

$filtered->all();

/*
    [
        ['product' => 'Desk', 'price' => 200],
        ['product' => 'Bookcase', 'price' => 150],
        ['product' => 'Door', 'price' => 100],
    ]
*/

جمع بندی :

در این مقاله به‌طور خلاصه و کاربردی به بررسی Collection‌های موجود در لاراول پرداختیم و با این خاصیت فوق‌العاده لاراول تا حدود زیادی آشنا شدیم. اگر در این مورد سوال یا نظری داشتید خوشحال می‌شویم که با ما و کاربران سون لرن به اشتراک بگذارید.

اگر به یادگیری بیشتر لاراول علاقه دارید می‌توانید در دوره آموزشی لاراول کاربردی (بسته پروژه محور) شرکت کنید، این دوره شامل ۱۲ پروژه کاربردی و پر استفاده در دنیای واقعی است، که تمامی پروژه‌ها به صورت کامل برنامه‌ نویسی خواهند شد، تا دانشجو بتواند با روند ایجاد و تکمیل پروژه به صورت کامل آشنا شود.

چه امتیازی به این مقاله می دید؟
نویسنده علی مجیدی
Backend Developer | PHP & Laravel Developer

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :