الکوئنت: مجموعه ها
معرفی
همه متدهای Eloquent که بیش از یک نتیجه مدل را برمیگردانند، نمونههایی از کلاس را برمیگردانند
Illuminate\Database\Eloquent\Collection
، از جمله نتایج بازیابی شده از طریق
get
متد یا دسترسی به آنها از طریق یک رابطه. شی مجموعه Eloquent
مجموعه پایه
لاراول را گسترش می دهد ، بنابراین به طور طبیعی ده ها روش مورد استفاده برای کار روان با آرایه زیرین مدل های Eloquent را به ارث می برد. حتما اسناد مجموعه لاراول را مرور کنید تا همه چیز را در مورد این روش های مفید بدانید!
همه مجموعهها همچنین به عنوان تکرارکننده عمل میکنند، و به شما امکان میدهند تا روی آنها حلقه بزنید، گویی آرایههای ساده PHP هستند:
use App\Models\User; $users = User::where('active', 1)->get(); foreach ($users as $user) { echo $user->name;}
با این حال، همانطور که قبلاً ذکر شد، مجموعهها بسیار قدرتمندتر از آرایهها هستند و انواع عملیات نقشه/کاهش را که ممکن است با استفاده از یک رابط بصری زنجیرهوار شوند، در معرض دید قرار میدهند. برای مثال، ممکن است همه مدلهای غیرفعال را حذف کنیم و سپس نام اول را برای هر کاربر باقیمانده جمعآوری کنیم:
$names = User::all()->reject(function (User $user) { return $user->active === false;})->map(function (User $user) { return $user->name;});
تبدیل مجموعه الکوئنت
در حالی که اکثر متدهای مجموعه Eloquent یک نمونه جدید از یک مجموعه Eloquent را برمیگردانند،
متدهای
collapse
,
flatten
,
,
, و
یک نمونه
مجموعه پایه
را برمیگردانند . به همین ترتیب، اگر یک
عملیات مجموعهای را برگرداند که شامل مدلهای Eloquent نیست، به یک نمونه مجموعه پایه تبدیل میشود.
flip
keys
pluck
zip
map
روش های موجود
همه مجموعههای Eloquent شیء مجموعه لاراول پایه را گسترش میدهند . بنابراین، آنها تمام متدهای قدرتمند ارائه شده توسط کلاس مجموعه پایه را به ارث می برند.
علاوه بر این،
Illuminate\Database\Eloquent\Collection
کلاس مجموعهای از روشها را برای کمک به مدیریت مجموعههای مدل ارائه میکند. اکثر روش ها
Illuminate\Database\Eloquent\Collection
نمونه هایی را برمی گرداند. با این حال، برخی از روش ها، مانند
modelKeys
، یک
Illuminate\Support\Collection
نمونه را برمی گرداند.
ضمیمه شامل تفاوت بجز پیدا کردن تازه تقاطع بار load از دست رفته است مدلKeys قابل مشاهده باشد makeHidden فقط setVisible setHidden toQuery منحصر بفرد
append($attributes)
این
append
روش ممکن است برای نشان دادن اینکه یک ویژگی باید
برای هر مدل در مجموعه
اضافه
شود استفاده شود. این روش آرایه ای از ویژگی ها یا یک ویژگی واحد را می پذیرد:
$users->append('team'); $users->append(['team', 'is_admin']);
contains($key, $operator = null, $value = null)
این
contains
روش ممکن است برای تعیین اینکه آیا یک نمونه مدل مشخص توسط مجموعه موجود است یا خیر، استفاده شود. این روش یک کلید اولیه یا یک نمونه مدل را می پذیرد:
$users->contains(1); $users->contains(User::find(1));
diff($items)
این
diff
متد همه مدل هایی را که در مجموعه داده شده وجود ندارند برمی گرداند:
use App\Models\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
تمام مدل هایی را که دارای کلید اصلی در آرایه داده شده هستند، برمی گرداند:
$users = User::all(); $user = $users->find(1);
fresh($with = [])
این
fresh
روش یک نمونه جدید از هر مدل در مجموعه را از پایگاه داده بازیابی می کند. علاوه بر این، هر رابطه مشخص شده مشتاقانه بارگذاری می شود:
$users = $users->fresh(); $users = $users->fresh('comments');
intersect($items)
این
intersect
متد تمام مدل هایی را که در مجموعه داده شده نیز وجود دارند برمی گرداند:
use App\Models\User; $users = $users->intersect(User::whereIn('id', [1, 2, 3])->get());
load($relations)
روش
load
مشتاق روابط داده شده را برای همه مدل های مجموعه بارگذاری می کند:
$users->load(['comments', 'posts']); $users->load('comments.author'); $users->load(['comments', 'posts' => fn ($query) => $query->where('active', 1)]);
loadMissing($relations)
متد
loadMissing
eager روابط داده شده را برای همه مدلهای مجموعه بارگذاری میکند، اگر روابط قبلاً بارگذاری نشده باشند:
$users->loadMissing(['comments', 'posts']); $users->loadMissing('comments.author'); $users->loadMissing(['comments', 'posts' => fn ($query) => $query->where('active', 1)]);
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]);
setVisible($attributes)
این
setVisible
روش به طور موقت
تمام ویژگی های قابل مشاهده در هر مدل در مجموعه
را لغو می کند :
$users = $users->setVisible(['id', 'name']);
setHidden($attributes)
این
setHidden
روش به طور موقت
تمام ویژگی های پنهان در هر مدل در مجموعه
را لغو می کند :
$users = $users->setHidden(['email', 'password', 'remember_token']);
toQuery()
این
toQuery
روش یک نمونه سازنده پرس و جوی Eloquent را برمیگرداند که شامل یک
whereIn
محدودیت در کلیدهای اولیه مدل مجموعه است:
use App\Models\User; $users = User::where('status', 'VIP')->get(); $users->toQuery()->update([ 'status' => 'Administrator',]);
unique($key = null, $strict = false)
این
unique
روش همه مدلهای منحصربهفرد مجموعه را برمیگرداند. هر مدلی از همان نوع با کلید اصلی مشابه با مدل دیگری در مجموعه حذف می شود:
$users = $users->unique();
مجموعه های سفارشی
اگر می خواهید
Collection
هنگام تعامل با یک مدل خاص از یک شی سفارشی استفاده کنید، می توانید یک
newCollection
متد را در مدل خود تعریف کنید:
<?php namespace App\Models; use App\Support\UserCollection;use Illuminate\Database\Eloquent\Collection;use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * Create a new Eloquent Collection instance. * * @param array<int, \Illuminate\Database\Eloquent\Model> $models * @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model> */ public function newCollection(array $models = []): Collection { return new UserCollection($models); }}
هنگامی که یک روش را تعریف کردید
newCollection
، هر زمانی که Eloquent به طور معمول یک نمونه را برگرداند، نمونه ای از مجموعه سفارشی خود را دریافت خواهید کرد
Illuminate\Database\Eloquent\Collection
. اگر می خواهید از یک مجموعه سفارشی برای هر مدل در برنامه خود استفاده کنید، باید متد را
newCollection
بر روی یک کلاس مدل پایه تعریف کنید که توسط همه مدل های برنامه شما گسترش یافته است.