Laravel/eloquent collections
مقدمة
إنّ جميع مجموعات النتائج المتعددة المعادة من Eloquent هي كائنات من الصنف Illuminate\Database\Eloquent\Collection
، بما فيها النتائج المستردة من التابع get
أو من العلاقات. يرث صنف مجموعة Eloquent من الصنف الأساسي لمجموعة Laravel، وبالتالي ترث هذه المجموعات الكثير من التوابع التي تساعد بالعمل مع المصفوفات المستخدمة مع نماذج Eloquent.
بالطبع، تعمل جميع المجموعات كمكررات، مما يمكّنك من المرور على عناصرها وكأنها مصفوفات عادية:
$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
و zip
و collapse
و flatten
و flip
كائنا من الصنف الأساسي للمجموعات. بالمثل، إذا أعاد التابع map
مجموعة لا تحوي أي كائن من نموذج Eloquent، سيتم تحويله تلقائيًّا إلى الصنف الأساسي.
التوابع المتاحة
الصنف الأساسي للمجموعات
كما ذُكر، جميع مجموعات Eloquent ترث من الصنف الأساسي لمجموعات Laravel؛ وبالتالي، تزوّد جميع التوابع القوية التي يزوّدها الصنف الأساسي للمجموعات.
المجموعات المخصصة
إذا أردت استخدام كائن مخصص من الصنف Collection
مع توابعك المخصصة الخاصة، يمكنك إعادة تعيين التابع newCollection
على صنف نموذجك:
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* إنشاء كائن جديد من صنف مجموعة Eloquent.
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
بعد تعريف التابع newCollection
، ستتلقى كائنًا من مجموعتك المخصصة عندما يعيد Eloquent كائن Collection
من ذلك النموذج. إذا أردت استخدام صنف Collection
مخصص لكل نماذجك، عرّف التابع newCollection
على صنف نموذج أساسي الذي ترثه جميع نماذجك.