نسخه:

الکوئنت: مجموعه ها

معرفی

همه مجموعه‌های چند نتیجه‌ای که توسط Eloquent برگردانده می‌شوند، نمونه‌هایی از Illuminate\Database\Eloquent\Collection شی هستند، از جمله نتایج بازیابی شده از طریق get متد یا دسترسی به آنها از طریق یک رابطه. شی مجموعه Eloquent مجموعه پایه لاراول را گسترش می دهد ، بنابراین به طور طبیعی ده ها روش مورد استفاده برای کار روان با آرایه زیرین مدل های Eloquent را به ارث می برد.

همه مجموعه‌ها همچنین به عنوان تکرارکننده عمل می‌کنند، و به شما امکان می‌دهند تا روی آنها حلقه بزنید، گویی آرایه‌های ساده PHP هستند:

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

با این حال، مجموعه‌ها بسیار قوی‌تر از آرایه‌ها هستند و انواع عملیات نقشه/کاهش را که ممکن است با استفاده از یک رابط بصری زنجیره‌وار شوند، در معرض دید قرار می‌دهند. به عنوان مثال، بیایید همه مدل‌های غیرفعال را حذف کنیم و نام کوچک را برای هر کاربر باقی‌مانده جمع کنیم:

$users = App\User::all();
 
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});

در حالی که اکثر متدهای مجموعه Eloquent یک نمونه جدید از یک مجموعه Eloquent را برمی‌گردانند، متدهای pluck , keys , , و یک نمونه مجموعه پایه را برمی‌گردانند . به همین ترتیب، اگر یک عملیات مجموعه‌ای را برگرداند که شامل هیچ مدل Eloquent نیست، به طور خودکار به یک مجموعه پایه فرستاده می‌شود. zip collapse flatten flip map

روش های موجود

همه مجموعه‌های Eloquent شیء مجموعه لاراول پایه را گسترش می‌دهند . بنابراین، آنها تمام متدهای قدرتمند ارائه شده توسط کلاس مجموعه پایه را به ارث می برند.

علاوه بر این، Illuminate\Database\Eloquent\Collection کلاس مجموعه‌ای از روش‌ها را برای کمک به مدیریت مجموعه‌های مدل ارائه می‌کند. اکثر روش ها Illuminate\Database\Eloquent\Collection نمونه هایی را برمی گرداند. با این حال، برخی از روش ها یک Illuminate\Support\Collection نمونه پایه را برمی گرداند.

contains($key, $operator = null, $value = null)

این contains روش ممکن است برای تعیین اینکه آیا یک نمونه مدل مشخص توسط مجموعه موجود است یا خیر، استفاده شود. این روش یک کلید اولیه یا یک نمونه مدل را می پذیرد:

$users->contains(1);
 
$users->contains(User::find(1));

diff($items)

این diff متد همه مدل هایی را که در مجموعه داده شده وجود ندارند برمی گرداند:

use App\User;
 
$users = $users->diff(User::whereIn('id', [1, 2, 3])->get());

except($keys)

متد except تمام مدل هایی را که کلیدهای اولیه داده شده را ندارند برمی گرداند:

$users = $users->except([1, 2, 3]);

find($key)

این find روش مدلی را پیدا می کند که دارای یک کلید اولیه معین است. اگر $key یک نمونه مدل است، find سعی خواهد کرد مدلی مطابق با کلید اصلی را برگرداند. اگر $key آرایه ای از کلیدها باشد، find تمام مدل هایی را که با $keys استفاده از whereIn() :

$users = User::all();
 
$user = $users->find(1);

fresh($with = [])

این fresh روش یک نمونه جدید از هر مدل در مجموعه را از پایگاه داده بازیابی می کند. علاوه بر این، هر رابطه مشخص شده مشتاقانه بارگذاری می شود:

$users = $users->fresh();
 
$users = $users->fresh('comments');

intersect($items)

این intersect متد تمام مدل هایی را که در مجموعه داده شده نیز وجود دارند برمی گرداند:

use App\User;
 
$users = $users->intersect(User::whereIn('id', [1, 2, 3])->get());

load($relations)

روش load مشتاق روابط داده شده را برای همه مدل های مجموعه بارگذاری می کند:

$users->load('comments', 'posts');
 
$users->load('comments.author');

loadMissing($relations)

متد loadMissing eager روابط داده شده را برای همه مدل‌های مجموعه بارگذاری می‌کند، اگر روابط قبلاً بارگذاری نشده باشند:

$users->loadMissing('comments', 'posts');
 
$users->loadMissing('comments.author');

modelKeys()

متد modelKeys کلیدهای اصلی را برای همه مدل‌های مجموعه برمی‌گرداند:

$users->modelKeys();
 
// [1, 2, 3, 4, 5]

makeVisible($attributes)

این makeVisible روش ویژگی هایی را قابل مشاهده می کند که معمولاً در هر مدل در مجموعه "پنهان" هستند:

$users = $users->makeVisible(['address', 'phone_number']);

makeHidden($attributes)

این makeHidden روش ویژگی هایی را پنهان می کند که معمولاً در هر مدل در مجموعه "قابل مشاهده" هستند:

$users = $users->makeHidden(['address', 'phone_number']);

only($keys)

متد only تمام مدل هایی را که دارای کلیدهای اولیه هستند برمی گرداند:

$users = $users->only([1, 2, 3]);

unique($key = null, $strict = false)

این unique روش همه مدل‌های منحصربه‌فرد مجموعه را برمی‌گرداند. هر مدلی از همان نوع با کلید اصلی مشابه با مدل دیگری در مجموعه حذف می شود.

$users = $users->unique();

مجموعه های سفارشی

اگر نیاز به استفاده از یک Collection شی سفارشی با متدهای پسوند خود دارید، می توانید newCollection روش را در مدل خود لغو کنید:

<?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);
}
}

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