المجموعات في رابط الكائنات بالعلاقات Eloquent

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

مقدمة

إنّ جميع مجموعات النتائج المتعددة المعادة من 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 على صنف نموذج أساسي الذي ترثه جميع نماذجك.

مصادر