الکوئنت: مجموعه ها
معرفی
همه مجموعههای چند نتیجهای که توسط 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
نمونه پایه را برمی گرداند.
شامل تفاوت بجز پیدا کردن تازه تقاطع بار load از دست رفته است مدلKeys قابل مشاهده باشد makeHidden فقط منحصر بفرد
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
روی یک کلاس مدل پایه که توسط همه مدل های شما گسترش می یابد، لغو کنید.